使用 VSCode Dev Containers 设置 Docker 中的 Docker:如何访问主机上正在运行的 docker 容器

Blo*_*je5 5 docker vscode-remote

我使用 VSCode 开发容器作为 golang 开发环境,使用默认的 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"
Run Code Online (Sandbox Code Playgroud)

并将以下安装添加到以下安装中devcontainer.json:

"mounts": ["source=/var/run/docker.sock,target=/var/run/docker-host.sock,type=bind"]
Run Code Online (Sandbox Code Playgroud)

这确实允许我访问本地计算机上运行的 Docker 守护进程。但是,如果我启动一个 postgres 容器:

# 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"
Run Code Online (Sandbox Code Playgroud)

我可以从本地计算机连接到它,但不能从开发容器内部连接到它。在启动开发容器时有什么方法可以指定网络选项(例如允许主机网络或创建共享网络)?或者是否有其他方法可以从我的开发容器内连接到另一个正在运行的 docker 容器?

小智 1

仅当您能够在开发容器中运行其他容器时,这个答案才是好的。

您可以使用 docker-in-docker 设置开发容器。这样您就可以在 Dev 容器中运行 docker 容器(因此网络可以工作)。Dockerfile 看起来像这样。有一篇中等文章很好地解释了这一点。

    FROM docker:19.03.12-dind-rootless@sha256:7606255ca83a7f516fae1b78299b79774f1f798ba9fc792a7231e7b0967ddb05
    USER root

    # Change this with your dependencies, note that this uses alpine apk
    RUN apk add git bash curl make vim go

    USER rootless
    ENV DOCKER_HOST=unix:///var/run/user/1000/docker.sock
Run Code Online (Sandbox Code Playgroud)