jenkins运行docker命令获取权限被拒绝

guy*_*mal 3 jenkins jenkins-plugins docker docker-compose docker-in-docker

我是詹金斯的新手。目前我有一个由 docker 启动的 jenkins 服务器,其中包含以下 docker-compose 文件:

\n
version: '3.7'\nservices:\n  jenkins:\n    image: jenkins/jenkins:lts\n    privileged: true\n    user: root\n    ports:\n      - 50000:50000\n    container_name: jenkins\n    volumes:\n      - ~/jenkins:/var/jenkins_home\n      - /var/run/docker.sock:/var/run/docker.sock\n      - /usr/local/bin/docker:/usr/local/bin/docker\n
Run Code Online (Sandbox Code Playgroud)\n

然后我创建了一个简单的管道来测试 jenkins 内的 docker。这是管道脚本:

\n
node {\n    stage "Create build output"\n   \n    sh "docker info"\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

错误消息如下:

\n
Started by user myuser\nRunning in Durability level: MAX_SURVIVABILITY\n[Pipeline] Start of Pipeline\n[Pipeline] node\nRunning on Jenkins in /var/jenkins_home/workspace/test-pip\n[Pipeline] {\n[Pipeline] stage (Create build output)\nUsing the \xe2\x80\x98stage\xe2\x80\x99 step without a block argument is deprecated\nEntering stage Create build output\nProceeding\n[Pipeline] sh\n+ docker info\n/var/jenkins_home/workspace/test-pip@tmp/durable-eb4fd6e4/script.sh: 1: docker: Permission denied\n[Pipeline] }\n[Pipeline] // node\n[Pipeline] End of Pipeline\nERROR: script returned exit code 127\nFinished: FAILURE\n
Run Code Online (Sandbox Code Playgroud)\n

检查完其他一些主题后,我已经完成了所有这些命令:

\n
chmod 777 /var/run/docker.sock\n
Run Code Online (Sandbox Code Playgroud)\n
sudo usermod -a -G docker $USER\n
Run Code Online (Sandbox Code Playgroud)\n

但没有任何效果。我还为 jenkins 安装了 docker 插件。\n通过以下命令进入 jenkins 容器后:

\n
docker exec -it 9729efd670b7 /bin/bash\n
Run Code Online (Sandbox Code Playgroud)\n

我执行 docker 命令:

\n
docker info\n
Run Code Online (Sandbox Code Playgroud)\n

但控制台打印出命令未找到:

\n
bash: docker: command not found\n
Run Code Online (Sandbox Code Playgroud)\n

有谁知道我应该配置什么来让 jenkins 运行 docker?谢谢。

\n

fmd*_*lle 5

有一些不同的可能性可以将 jenkins 运行到 docker 中,请参阅此链接中的详细信息。
基本上,有三种解决方案:

  1. 扩展jenkins镜像以安装docker
  2. 将docker主机挂载到docker容器
  3. 运行另一个包含 docker-in-docker 的镜像

对于您的情况,您可以使用第二种解决方案,但由于每种解决方案都有优点和不方便,您可以尝试另一种解决方案。
尝试更改您的安装路径以匹配容器路径/usr/bin/docker