我正在使用VSCode开发容器作为默认的golang镜像的开发环境。我在Dockerfile
中添加了以下代码片段来下载Docker CLI:
# Add Docker
RUN apt-get update \
&& apt-get -y install --no-install-recommends \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common \
&& curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - \
&& add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" \
&& apt-get update \
&& apt-get -y install --no-install-recommends docker-ce \
# Clean up
&& apt-get autoremove -y \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*
# Symlink docker socket
RUN ln -s "/var/run/docker-host.sock" "/var/run/docker.sock"
并将以下挂载添加到devcontainer.json
中的挂载列表中:
"mounts": ["source=/var/run/docker.sock,target=/var/run/docker-host.sock,type=bind"]
这确实让我可以访问在本地机器上运行的Docker守护程序。但是,如果我启动一个postgres容器:
docker run -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres:9
我可以从本地计算机连接到它,但无法从Dev Container内部连接。是否有一种方法可以在启动Dev Container时指定网络选项(例如允许主机网络或创建共享网络)?或者是否有其他方法可以从Dev Container内部连接到另一个正在运行的Docker容器?
.devcontainers/devcontainer.json
所需更改的说明: 更新(2021-03-04):从20.10.x开始,不再需要--experimental选项(moby/moby#40759)(请参见添加实验性“无根”dind变体)。 - gkephorus