我正在关注 Jenkins 网站的官方教程。我有一个Jenkinsfile
按照教程运行管道的 blueocean Docker 容器:
pipeline {
agent {
docker {
image 'node:6-alpine'
args '-p 3000:3000'
}
}
stages {
stage('Build') {
steps {
sh 'npm install'
}
}
}
}
问题是管道在尝试拉取 Docker 映像时失败:
[ode-js-react-npm-app_master-6PEWX3VWDA4SAdDMJA4YKJCZSABJSAQCSGVYMKHINXGDDJLA] Running shell script
+ docker pull node:6-alpine
Warning: failed to get default registry endpoint from daemon (Cannot connect to the Docker daemon. Is the docker daemon running on this host?). Using system default: https://index.docker.io/v1/
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
script returned exit code 1
经过一些故障排除后,我意识到这是失败的,因为 Jenkins 试图拉取 Docker 容器本身,而不是主机。这不是我想要的,文档实际上指出:
此映像参数(代理部分的 docker 参数)下载 node:6-alpine Docker 映像(如果您的计算机上尚不可用)并将此映像作为单独的容器运行。这意味着:您将在 Docker 中本地运行单独的 Jenkins 和 Node 容器。Node 容器成为 Jenkins 用来运行 Pipeline 项目的代理。然而,这个容器是短暂的——它的生命周期只是你的管道执行的持续时间。
有人可以解释我做错了什么以及为什么尝试将 Node.js Docker 映像拉入 Jenkins 而不是本地机器吗?我想从编排应用程序的 Nodejs 容器中拥有一个单独的 Jenkins 容器。