[英]Docker on Windows10 home - inside docker container connect to the docker engine
在创建 Jenkins Docker 容器时,能够连接到 Docker 守护进程非常有用。 这样,我就可以在 Jenkins 容器内启动 docker 命令。
例如,在启动 Jenkins Docker 容器后,我想“docker exec -it container-id bash”并启动“docker ps”。
在 Linux 上,您可以在 /var/run/docker.sock 上使用绑定挂载。 在 Windows 上,这似乎是不可能的。 解决方案是使用“命名管道”。 因此,在我的 docker-compose.yml 文件中,我尝试创建一个命名管道。
version: '2'
services:
jenkins:
image: jenkins-docker
build:
context: ./
dockerfile: Dockerfile_docker
ports:
- "8080:8080"
- "50000:50000"
networks:
- jenkins
volumes:
- jenkins_home:/var/jenkins_home
- \\.\pipe\docker_engine:\\.\pipe\docker_engine
# - /var/run/docker.sock:/var/run/docker.sock
# - /path/to/postgresql/data:/var/run/postgresql/data
# - etc.
使用此文件启动 docker-compose 时,出现以下错误:
无法连接到 unix:///var/run/docker.sock 上的 Docker 守护进程。 docker 守护进程是否正在运行?
如何设置 docker-compose 文件,以便我可以在启动的容器内使用 docker.sock(或 Docker)?
在 Linux 上,您可以使用类似卷的内容:/var/run/docker.sock:/var/run/docker.sock。 这在 Windows 环境中不起作用。 当您将此文件夹 (/var) 添加到 Oracle VM Virtualbox 时,它将永远不会获得任何 IP。 并且在很多帖子上
您可以在tcp://localhost:2375
上公开守护程序,而无需在设置中使用 TLS。 通过这种方式,您可以将 Jenkins 配置为使用 Docker API 而不是套接字。 我鼓励您阅读Nick Janetakis 撰写的关于“了解 Docker 守护程序和 Docker CLI 如何协同工作”的文章。
然后有几个 Jenkins 的 Docker 插件允许这种连接:
此外,您可以在 wiki.jenkins.io 上的Docker 插件文档中找到其他信息:
def dockerCloudParameters = [
connectTimeout: 3,
containerCapStr: '4',
credentialsId: '',
dockerHostname: '',
name: 'docker.local',
readTimeout: 60,
serverUrl: 'unix:///var/run/docker.sock', // <-- Replace here by the tcp address
version: ''
]
编辑 1:
我不知道它是否有用,但是根据Docker Daemon configuration doc ,Windows 上的 Docker Daemon 位于C:\\ProgramData\\docker
。
编辑2:
您需要明确说明使用host
网络的容器,因为您想同时公开 Jenkins 和 Docker API。 按照本文档,您只需将--network=host
(或--network=host
-compose 中的network_mode: 'host'
)添加到您的容器/服务中。 有关更多信息,您可以阅读本文以了解这种网络模式的目的是什么。
第一次尝试是使用“Docker Quickstart 终端”启动 Docker 环境。 在该环境中运行 Docker 命令时,这是一个很好的解决方案。
当通过 Docker 安装完整的 CI/CD Jenkins 环境时,意味着在 Jenkins Docker 容器内您需要访问 Docker 守护进程。 在尝试了许多解决方案,阅读了许多帖子后,这不起作用。 @Paul Rey,非常感谢您尝试各种路线。
一个好的解决方案是获取一个 Ubuntu 虚拟机并通过 Oracle VM Virtualbox 安装它。 然后通过此官方说明安装 Docker非常重要。
在安装 Docker 之前,当然需要先安装 Curl、Git 等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.