jenkins 运行 docker 命令获取权限被拒绝
jenkins run docker command get permission denied
我是詹金斯的新手。目前我有一个 jenkins 服务器由 docker 启动,这个 docker-compose 文件:
version: '3.7'
services:
jenkins:
image: jenkins/jenkins:lts
privileged: true
user: root
ports:
- 50000:50000
container_name: jenkins
volumes:
- ~/jenkins:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- /usr/local/bin/docker:/usr/local/bin/docker
然后我创建了一个简单的管道来测试 jenkins 中的 docker。这是管道脚本:
node {
stage "Create build output"
sh "docker info"
}
错误信息如下:
Started by user myuser
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/test-pip
[Pipeline] {
[Pipeline] stage (Create build output)
Using the ‘stage’ step without a block argument is deprecated
Entering stage Create build output
Proceeding
[Pipeline] sh
+ docker info
/var/jenkins_home/workspace/test-pip@tmp/durable-eb4fd6e4/script.sh: 1: docker: Permission denied
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 127
Finished: FAILURE
在检查了一些其他主题后,我已经完成了所有这些命令:
chmod 777 /var/run/docker.sock
sudo usermod -a -G docker $USER
但没有任何效果。我还为 jenkins 安装了 docker 插件。
通过此命令进入 jenkins 容器后:
docker exec -it 9729efd670b7 /bin/bash
我执行 docker 命令:
docker info
但未找到控制台打印命令:
bash: docker: command not found
有谁知道我应该配置什么来制作 jenkins 运行 docker?谢谢。
将 运行 jenkins 转换为 docker 有一些不同的可能性,请参阅此 link。
中的详细信息
基本上,有三种解决方案:
- 扩展jenkins镜像安装docker
- 将 docker 主机挂载到 docker 容器
- 运行 包含 docker-in-docker
的另一张图片
在你的情况下,你可以使用第二种解决方案,但由于每种解决方案各有优缺点,你可以尝试另一种。
尝试更改挂载路径以匹配应为 /usr/bin/docker
.
的容器路径
查看 this 演示项目,其中 jenkins 在 docker 容器中运行,其中包含 docker 客户端。
要在 Jenkins 容器中运行 docker 客户端,请遵循以下流程:
- 构建自定义 Jenkins Dockefile
- 在自定义 Jenkins Dockerfile 中复制 docker 客户端(例如,来自 dind 图像)
- 使用绑定挂载将主机 docker 套接字暴露给 Jenkins 容器。
我是詹金斯的新手。目前我有一个 jenkins 服务器由 docker 启动,这个 docker-compose 文件:
version: '3.7'
services:
jenkins:
image: jenkins/jenkins:lts
privileged: true
user: root
ports:
- 50000:50000
container_name: jenkins
volumes:
- ~/jenkins:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- /usr/local/bin/docker:/usr/local/bin/docker
然后我创建了一个简单的管道来测试 jenkins 中的 docker。这是管道脚本:
node {
stage "Create build output"
sh "docker info"
}
错误信息如下:
Started by user myuser
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/test-pip
[Pipeline] {
[Pipeline] stage (Create build output)
Using the ‘stage’ step without a block argument is deprecated
Entering stage Create build output
Proceeding
[Pipeline] sh
+ docker info
/var/jenkins_home/workspace/test-pip@tmp/durable-eb4fd6e4/script.sh: 1: docker: Permission denied
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 127
Finished: FAILURE
在检查了一些其他主题后,我已经完成了所有这些命令:
chmod 777 /var/run/docker.sock
sudo usermod -a -G docker $USER
但没有任何效果。我还为 jenkins 安装了 docker 插件。 通过此命令进入 jenkins 容器后:
docker exec -it 9729efd670b7 /bin/bash
我执行 docker 命令:
docker info
但未找到控制台打印命令:
bash: docker: command not found
有谁知道我应该配置什么来制作 jenkins 运行 docker?谢谢。
将 运行 jenkins 转换为 docker 有一些不同的可能性,请参阅此 link。
中的详细信息
基本上,有三种解决方案:
- 扩展jenkins镜像安装docker
- 将 docker 主机挂载到 docker 容器
- 运行 包含 docker-in-docker 的另一张图片
在你的情况下,你可以使用第二种解决方案,但由于每种解决方案各有优缺点,你可以尝试另一种。
尝试更改挂载路径以匹配应为 /usr/bin/docker
.
查看 this 演示项目,其中 jenkins 在 docker 容器中运行,其中包含 docker 客户端。
要在 Jenkins 容器中运行 docker 客户端,请遵循以下流程:
- 构建自定义 Jenkins Dockefile
- 在自定义 Jenkins Dockerfile 中复制 docker 客户端(例如,来自 dind 图像)
- 使用绑定挂载将主机 docker 套接字暴露给 Jenkins 容器。