docker - 使用 VSCode 开发容器设置 Docker 中的 Docker:如何访问主机上正在运行的 docker 容器
问题描述
我使用 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"
并将以下挂载添加到中的挂载中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 内部连接。有没有办法在启动开发容器时指定网络选项(例如允许主机网络或创建共享网络)?还是有另一种方法可以从我的开发容器内连接到另一个正在运行的 docker 容器?
解决方案
仅当您能够在 Dev Container 中运行其他容器时,此答案才有效。
您可以使用 docker-in-docker 设置您的开发容器。这样你就可以在你的 Dev Container 中运行 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
推荐阅读
- javascript - Vue - 如何使用道具将数据从 main.js 传递到 *.vue
- sql - 如何使用 SQL 聚合 jsonb 数组中的值
- c - 为什么在 C 中重新声明函数是合法的?
- android - com.android.build.gradle.internal.res.ResourceCompilerRunnable
- php - 将json保存到数据库mysql时出错?
- node.js - Vite 插件:了解 NodeJS 并导出默认值
- javascript - 如何从 API 检索数据并将其转置到网页?
- javascript - 当窗口大小低于最小断点(576px)时,React 组件中的引导卡在每个卡之间有很大的空间
- .htaccess - 获取 500 Internal Server Error 而不是 404 Not Found 错误
- php - 如何在php中为url添加参数?