Skip to content

Commit

Permalink
feat(docker-compose): support privileged mode in docker compose (#3553)
Browse files Browse the repository at this point in the history
support privileged mode in docker compose

---
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
  • Loading branch information
Tucker-Eric committed May 6, 2024
1 parent 5cf621a commit 7bb3bd9
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 0 deletions.
27 changes: 27 additions & 0 deletions docs/api/projen.md
Original file line number Diff line number Diff line change
Expand Up @@ -9891,6 +9891,7 @@ const dockerComposeServiceDescription: DockerComposeServiceDescription = { ... }
| <code><a href="#projen.DockerComposeServiceDescription.property.networks">networks</a></code> | <code><a href="#projen.IDockerComposeNetworkBinding">IDockerComposeNetworkBinding</a>[]</code> | Add some networks to the service. |
| <code><a href="#projen.DockerComposeServiceDescription.property.platform">platform</a></code> | <code>string</code> | Add platform. |
| <code><a href="#projen.DockerComposeServiceDescription.property.ports">ports</a></code> | <code><a href="#projen.DockerComposeServicePort">DockerComposeServicePort</a>[]</code> | Map some ports. |
| <code><a href="#projen.DockerComposeServiceDescription.property.privileged">privileged</a></code> | <code>boolean</code> | Run in privileged mode. |
| <code><a href="#projen.DockerComposeServiceDescription.property.volumes">volumes</a></code> | <code><a href="#projen.IDockerComposeVolumeBinding">IDockerComposeVolumeBinding</a>[]</code> | Mount some volumes into the service. |

---
Expand Down Expand Up @@ -10031,6 +10032,19 @@ Map some ports.

---

##### `privileged`<sup>Optional</sup> <a name="privileged" id="projen.DockerComposeServiceDescription.property.privileged"></a>

```typescript
public readonly privileged: boolean;
```

- *Type:* boolean
- *Default:* no privileged mode flag is provided

Run in privileged mode.

---

##### `volumes`<sup>Optional</sup> <a name="volumes" id="projen.DockerComposeServiceDescription.property.volumes"></a>

```typescript
Expand Down Expand Up @@ -14004,6 +14018,7 @@ Add a volume to the service.
| <code><a href="#projen.DockerComposeService.property.image">image</a></code> | <code>string</code> | Docker image. |
| <code><a href="#projen.DockerComposeService.property.imageBuild">imageBuild</a></code> | <code><a href="#projen.DockerComposeBuild">DockerComposeBuild</a></code> | Docker image build instructions. |
| <code><a href="#projen.DockerComposeService.property.platform">platform</a></code> | <code>string</code> | Target platform. |
| <code><a href="#projen.DockerComposeService.property.privileged">privileged</a></code> | <code>boolean</code> | Run in privileged mode. |

---

Expand Down Expand Up @@ -14151,6 +14166,18 @@ Target platform.

---

##### `privileged`<sup>Optional</sup> <a name="privileged" id="projen.DockerComposeService.property.privileged"></a>

```typescript
public readonly privileged: boolean;
```

- *Type:* boolean

Run in privileged mode.

---


### JsonPatch <a name="JsonPatch" id="projen.JsonPatch"></a>

Expand Down
5 changes: 5 additions & 0 deletions src/docker-compose/docker-compose-render.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ interface DockerComposeFileServiceSchema {
readonly environment?: Record<string, string>;
readonly labels?: Record<string, string>;
readonly entrypoint?: string[];
readonly privileged?: boolean;
}

/**
Expand Down Expand Up @@ -131,6 +132,10 @@ export function renderDockerComposeFile(
"platform",
serviceDescription.platform
),
...getObjectWithKeyAndValueIfValueIsDefined(
"privileged",
serviceDescription.privileged
),
...(Object.keys(serviceDescription.environment).length > 0
? { environment: serviceDescription.environment }
: {}),
Expand Down
12 changes: 12 additions & 0 deletions src/docker-compose/docker-compose-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,11 @@ export class DockerComposeService implements IDockerComposeServiceName {
*/
public readonly platform?: string;

/**
* Run in privileged mode
*/
public readonly privileged?: boolean;

constructor(
serviceName: string,
serviceDescription: DockerComposeServiceDescription
Expand All @@ -104,6 +109,7 @@ export class DockerComposeService implements IDockerComposeServiceName {
this.labels = serviceDescription.labels ?? {};
this.entrypoint = serviceDescription.entrypoint;
this.platform = serviceDescription.platform;
this.privileged = serviceDescription.privileged;
}

/**
Expand Down Expand Up @@ -236,4 +242,10 @@ export interface DockerComposeServiceDescription {
* @default - no platform is provided
*/
readonly platform?: string;

/**
* Run in privileged mode
* @default - no privileged mode flag is provided
*/
readonly privileged?: boolean;
}
25 changes: 25 additions & 0 deletions test/docker-compose/docker-compose.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,31 @@ describe("docker-compose", () => {
assertDockerComposeFileValidates(project.outdir);
});

test("can set privileged mode", () => {
const project = new TestProject();
const dc = new DockerCompose(project, {
services: {
alpine: {
image: "alpine",
privileged: true,
},
},
});

expect(dc._synthesizeDockerCompose()).toEqual({
version: "3.3",
services: {
alpine: {
image: "alpine",
privileged: true,
},
},
});

project.synth();
assertDockerComposeFileValidates(project.outdir);
});

describe("can add a volume", () => {
test("bind volume", () => {
const project = new TestProject();
Expand Down

0 comments on commit 7bb3bd9

Please sign in to comment.