You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 1b7c38d
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: docs/specs/devcontainer-reference.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -84,7 +84,7 @@ To apply the metadata together with a user's `devcontainer.json` at runtime the
84
84
|`updateRemoteUserUID`|`boolean`| Last value wins. | ✓ ||
85
85
|`hostRequirements`|`cpus`, `memory`, `storage`, `gpu`| Max value wins. | ✓ ||
86
86
87
-
Variables in string values will be substituted at the time the value is applied. When the order matters, the `devcontainer.json` is considered last.
87
+
Variables in string values will be substituted at the time the value is applied. When the order matters, the `devcontainer.json` is considered last. The same merge logic is used when a `devcontainer.json` file [extends](devcontainerjson-reference.md#configuration-inheritance) another configuration file in the same repository.
Copy file name to clipboardExpand all lines: docs/specs/devcontainerjson-reference.md
+39Lines changed: 39 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,6 +9,7 @@ Metadata properties marked with a 🏷️ can be stored in the `devcontainer.met
9
9
| Property | Type | Description |
10
10
|----------|------|-------------|
11
11
|`name`| string | A name for the dev container displayed in the UI |
12
+
|`extends`| string | A relative path to a JSON or JSONC file in the same repository to use as a base configuration. The referenced file is merged with this file using the [image metadata merge logic](devcontainer-reference.md#merge-logic). See [Configuration inheritance](#configuration-inheritance). |
12
13
|`forwardPorts` 🏷️ | array | An array of port numbers or `"host:port"` values (e.g. `[3000, "db:5432"]`) that should always be forwarded from inside the primary container to the local machine (including on the web). The property is most useful for forwarding ports that cannot be auto-forwarded because the related process that starts before the `devcontainer.json` supporting service / tool connects or for forwarding a service not in the primary container in Docker Compose scenarios (e.g. `"db:5432"`). Defaults to `[]`. |
13
14
|`portsAttributes` 🏷️ | object | Object that maps a port number, `"host:port"` value, range, or regular expression to a set of default options. See [port attributes](#port-attributes) for available options. For example: <br />`"portsAttributes": {"3000": {"label": "Application port"}}`|
14
15
|`otherPortsAttributes` 🏷️ | object | Default options for ports, port ranges, and hosts that aren't configured using `portsAttributes`. See [port attributes](#port-attributes) for available options. For example: <br /> `"otherPortsAttributes": {"onAutoForward": "silent"}`|
@@ -29,6 +30,44 @@ Metadata properties marked with a 🏷️ can be stored in the `devcontainer.met
29
30
|`overrideFeatureInstallOrder`| array | By default, Features will attempt to automatically set the order they are installed based on a `installsAfter` property within each of them. This property allows you to override the Feature install order when needed. For example: <br />`"overrideFeatureInstallОrder": [ "ghcr.io/devcontainers/features/common-utils", "ghcr.io/devcontainers/features/github-cli" ]`|
30
31
|`customizations` 🏷️| object | Product specific properties, defined in [supporting tools](supporting-tools.md)|
31
32
33
+
## Configuration inheritance
34
+
35
+
Multiple teams collaborating on a common codebase may need slightly different `devcontainer.json` settings. The `extends` property lets a configuration inherit from another JSON or JSONC file in the same repository:
`extends` is a path relative to the file that declares it (for example `"./defaults.json"`, `"../defaults.json"`, or `"./dev/defaults.json"`). Referenced files may themselves use `extends`. Absolute paths and URLs are not supported.
60
+
61
+
The referenced configuration is merged with the current file using the same [merge logic](devcontainer-reference.md#merge-logic) applied to image metadata, with the current file considered last:
62
+
63
+
- Array properties such as `forwardPorts`, `capAdd`, and `securityOpt` are the union of values without duplicates.
64
+
-`hostRequirements` takes the maximum of each field.
65
+
- Object maps such as `remoteEnv`, `containerEnv`, `features`, and `customizations` merge per key, with the current file winning on conflicts.
66
+
- Boolean `init` and `privileged` are `true` if at least one value is `true`.
67
+
- Scalar properties such as `name`, `image`, `remoteUser`, and lifecycle commands use last value wins.
68
+
69
+
The `extends` property itself is not present in the merged result.
70
+
32
71
## Scenario specific properties
33
72
34
73
The focus of `devcontainer.json` is to describe how to enrich a container for the purposes of development rather than acting as a multi-container orchestrator format. Instead, container orchestrator formats can be referenced when needed to manage multiple containers and their lifecycles. Today, `devcontainer.json` includes scenario specific properties for working without a container orchestrator (by directly referencing an image or Dockerfile) and for using Docker Compose as a simple multi-container orchestrator.
Copy file name to clipboardExpand all lines: schemas/devContainer.base.schema.json
+4Lines changed: 4 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -16,6 +16,10 @@
16
16
"type": "string",
17
17
"description": "A name for the dev container which can be displayed to the user."
18
18
},
19
+
"extends": {
20
+
"type": "string",
21
+
"description": "A relative path to a JSON or JSONC file in the same repository whose configuration is used as a base. The referenced file is merged with this file using the image metadata merge logic."
22
+
},
19
23
"features": {
20
24
"type": "object",
21
25
"description": "Features to add to the dev container.",
0 commit comments