【发布时间】:2017-06-04 03:58:50
【问题描述】:
在我的Manage Jenkins > Global Tool Configuration,我已经配置了一个名为“docker”的工具,如下:
name: docker
install automatically: CHECKED
docker version: latest
那么我的jenkinsfile 中只有以下内容,仅此而已:
node {
DOCKER_HOME = tool "docker"
sh """
echo $DOCKER_HOME
ls $DOCKER_HOME/bin/
$DOCKER_HOME/bin/docker images
$DOCKER_HOME/bin/docker ps -a
"""
}
我收到类似这样的错误“无法连接到 Docker 守护程序。Docker 守护程序是否在此主机上运行?”。
以下是完整的console log:
Started by user Syed Rakib Al Hasan
[Pipeline] node
Running on master in /var/jenkins_home/workspace/helloDocker
[Pipeline] {
[Pipeline] tool
[Pipeline] sh
[helloDocker] Running shell script
+ echo /var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker
/var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker
+ ls /var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker/bin/
docker
+ /var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker/bin/docker images
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE
在我的管道到达运行 docker 命令的行之前,我如何确保 docker 守护程序/服务正在运行/启动。
还有其他本地 docker-build-step 插件方式来实现我在这里所做的吗?喜欢docker ps -a 或docker images 或docker build -t?
一些假设:
假设我选择的节点尚未在我的主机中安装/运行 docker/docker-engine。这就是 tool 命令的目的,如果它还没有在节点中自动安装 docker。
【问题讨论】:
-
您不仅需要安装 docker,还需要运行 docker 守护进程。您可以通过其他方式配置主机,例如 ansible、systemd-unit 文件、AMI,以及在您的域中有效的任何方式。或者,您可以确保 docker 服务已启动并运行管道的第一个(阻塞)步骤。
-
我的 jenkins 本身在一个 docker 容器内——官方的 jenkins docker 容器。在容器内运行
sudo service docker start不起作用。所以我没有那个选项。 -
如果您的 jenkins 在 docker 容器中,那么它仍然无法神奇地运行 docker 命令,它需要访问正在运行的 docker 守护进程。无论您在哪里运行命令,都没有运行 docker 守护程序。您可以通过转发守护进程套接字在 docker 容器内公开您的主机 docker 守护进程,或者在容器内安装守护进程并使用它。这取决于您的设置。请花点时间了解一下 docker 的工作原理。
-
我认为最干净的方法是使用 docker 配置额外的主机并将其添加为 jenkins 的从节点。那些 docker-in-docker 方法相当 hacky...这样你仍然可以将 jenkins master 作为容器运行,并使用从节点进行 docker 构建。
-
@ffledgling 你指的是
svendowideit在本页forums.docker.com/t/… 中提到的方法吗?
标签: jenkins docker docker-engine