- Ids used to publish this Feature in the past - 'docker-from-docker'
Re-use the host docker socket, adding the Docker CLI to a container. Feature invokes a script to enable using a forwarded Docker socket within a container to run Docker commands.
"features": {
"ghcr.io/devcontainers/features/docker-outside-of-docker:1": {}
}
Options Id | Description | Type | Default Value |
---|---|---|---|
version | Select or enter a Docker/Moby CLI version. (Availability can vary by OS version.) | string | latest |
moby | Install OSS Moby build instead of Docker CE | boolean | true |
mobyBuildxVersion | Install a specific version of moby-buildx when using Moby | string | latest |
dockerDashComposeVersion | Compose version to use for docker-compose (v1 or v2 or none) | string | v2 |
installDockerBuildx | Install Docker Buildx | boolean | true |
installDockerComposeSwitch | Install Compose Switch (provided docker compose is available) which is a replacement to the Compose V1 docker-compose (python) executable. It translates the command line into Compose V2 docker compose then runs the latter. | boolean | true |
ms-azuretools.vscode-docker
- As the name implies, the Feature is expected to work when the host is running Docker (or the OSS Moby container engine it is built on). It may be possible to get running in other container engines, but it has not been tested with them.
- The host and the container must be running on the same chip architecture. You will not be able to use it with an emulated x86 image with Docker Desktop on an Apple Silicon Mac, for example.
- This approach does not currently enable bind mounting the workspace folder by default, and cannot support folders outside of the workspace folder. Consider whether the Docker-in-Docker Feature would better meet your needs given it does not have this limitation.
A common question that comes up is how you can use bind
mounts from the Docker CLI from within the a dev container using this Feature (e.g. via -v
). If you cannot use the Docker-in-Docker Feature, the only way to work around this is to use the host's folder paths instead of the container's paths. There are 2 ways to do this
- Add the following to
devcontainer.json
:
"remoteEnv": { "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" }
- Usage with Docker commands
docker run -it --rm -v ${LOCAL_WORKSPACE_FOLDER}:/workspace debian bash
- Usage with Docker-compose
version: "3.9"
services:
debian:
image: debian
volumes:
- ${LOCAL_WORKSPACE_FOLDER:-./}:/workspace
- The defaults value
./
is added so that thedocker-compose.yaml
file can work when it is run outside of the container
- This is useful if we don't want to edit the
docker-compose.yaml
file
- Add the following to
devcontainer.json
"workspaceFolder": "${localWorkspaceFolder}",
"workspaceMount": "source=${localWorkspaceFolder},target=${localWorkspaceFolder},type=bind"
- Rebuild the container.
- When the container first started with this settings, select the Workspace with the absolute path to the working directory inside the container
- Docker commands with bind mount should work as they did outside of the devcontainer
Note: There is no
${localWorkspaceFolder}
when using the Clone Repository in Container Volume command in the VS Code Dev Containers extension (info).
This Feature should work on recent versions of Debian/Ubuntu-based distributions with the apt
package manager installed.
bash
is required to execute the install.sh
script.
Note: This file was auto-generated from the devcontainer-feature.json. Add additional notes to a NOTES.md
.