在创建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
# - docker.sock:/var/run/docker.sock
# ... postgres, 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。在许多帖子上
答案 0 :(得分:1)
您可以在tcp://localhost:2375
上公开守护程序,而无需在设置中使用TLS。这样,您可以将Jenkins配置为使用Docker API而不是套接字。我鼓励您阅读this article by Nick Janetakis about "Understanding how the Docker Daemon and the Docker CLI work together"。
然后有几个用于Jenkins的Docker插件允许这种连接:
此外,您还可以在Docker plugin documentation on wiki.jenkins.io中找到其他信息:
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。
在this documentation之后,您只需要将--network=host
(或docker-compose中的network_mode: 'host'
)添加到您的容器/服务中。有关更多信息,您可以阅读this article来了解此网络模式的目的。
答案 1 :(得分:0)
首先尝试使用“ Docker Quickstart终端”启动Docker环境。在在该环境中运行 Docker命令时,这是一个很好的解决方案。
通过Docker安装完整的CI / CD Jenkins环境时,意味着在Jenkins Docker容器中,您需要访问Docker守护程序。在尝试了许多解决方案之后,阅读了许多文章,这没有用。 @Paul Rey,非常感谢您尝试各种路线。
一个好的解决方案是获取Ubuntu虚拟机并通过Oracle VM Virtualbox安装它。然后通过this official description安装Docker 非常重要。
在安装Docker之前,您当然需要安装Curl,Git等。