首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >docker:在使用docker容器使用Docker命令时找不到

docker:在使用docker容器使用Docker命令时找不到
EN

Stack Overflow用户
提问于 2018-02-09 02:03:30
回答 3查看 6.9K关注 0票数 3

詹金斯在码头的集装箱里跑。

Docker正在Mac操作系统中使用。因此,我在jenkins.yml中划出了这些行:

代码语言:javascript
运行
复制
    # mount docker sock and binary for docker in docker (only works on linux)
    #- /var/run/docker.sock:/var/run/docker.sock
    #- /usr/bin/docker:/usr/bin/docker

在Jenkinsfile中,它由JHipster生成,包含两个任务:

  1. 在Docker容器中执行生成
  2. 用声纳分析代码

列表项目

代码语言:javascript
运行
复制
node {
stage('checkout') {
    checkout scm
}

docker.image('openjdk:8').inside('-u root -e MAVEN_OPTS="-Duser.home=./"') {
    stage('check java') {
        sh "java -version"
    }

bitbucket的结帐成功了。管道停止,并在码头“拉openjdk:8”时出错。控制台输出是:

代码语言:javascript
运行
复制
[AAAAApp] Running shell script
+ docker inspect -f . openjdk:8
/var/jenkins_home/workspace/GeneticsDB@tmp/durable-21459aca/script.sh: 
2: /var/jenkins_home/workspace/GeneticsDB@tmp/durable-21459aca/script.sh: docker: not found
[Pipeline] sh
[AAAAApp] Running shell script
+ docker pull openjdk:8
/var/jenkins_home/workspace/GeneticsDB@tmp/durable-d5590370/script.sh: 
2: /var/jenkins_home/workspace/GeneticsDB@tmp/durable-d5590370/script.sh: docker: not found

但是,这个命令可以在命令行中成功运行,如下所示:

代码语言:javascript
运行
复制
docker pull openjdk:8
    8: Pulling from library/openjdk
    Digest: sha256:18c9622a8dc67b608a2dd0178b4c5aebc0e2da9a656072c6e799cfc46cb96422
    Status: Image is up to date for openjdk:8

我知道有一个类似的问题:Docker not found when building docker image using Docker Jenkins container pipeline

但我的码头在Mac上运行。

EN

回答 3

Stack Overflow用户

发布于 2018-02-09 02:38:23

实际上,问题在于如何在Docker上运行的容器内运行Docker。它是由

代码语言:javascript
运行
复制
brew install docker

并将jenkins.yml更新为

代码语言:javascript
运行
复制
 # mount docker sock and binary for docker in docker
- /var/run/docker.sock:/var/run/docker.sock
- /usr/local/bin/docker:/usr/local/bin/docker
票数 2
EN

Stack Overflow用户

发布于 2018-03-13 01:26:01

出了一个错误:

代码语言:javascript
运行
复制
Warning: failed to get default registry endpoint from daemon (Got 
permission denied while trying to connect to the Docker daemon socket 
at unix:///var/run/docker.sock: Get 
http://%2Fvar%2Frun%2Fdocker.sock/v1.35/info: dial unix 
/var/run/docker.sock: connect: permission denied). Using system 
default: https://index.docker.io/v1/
Got permission denied while trying to connect to the Docker daemon 
socket at unix:///var/run/docker.sock: Post 
http://%2Fvar%2Frun%2Fdocker.sock/v1.35/images/create?
fromImage=openjdk&tag=8: dial unix /var/run/docker.sock: connect: 
permission denied

解决方案:更新坞容器中/var/run/docker.sock的访问权限。

  1. 查找Jenkins的容器: docker容器ps -a
  2. 登录容器: docker -it -u root ec379335d599 /bin/bash
  3. upadte权限: chmod 777 /var/run/docker.sock
票数 0
EN

Stack Overflow用户

发布于 2018-03-13 01:45:01

如果您的jenkins正在码头集装箱内运行,那么我建议:

  1. 在集装箱内安装码头
  2. 挂载对接器套接字,这样它就可以从容器内部运行停靠器命令。
  3. 动态调整jenkins容器的entrypoint.sh中的jenkins用户的组权限,因此您不需要更改对接器套接字的权限,也不需要尝试将主机组与容器组匹配

最后一部分是以根用户身份运行的入口点,运行一个groupmod来调整用户组的gid,然后使用一个exec + gosu将权限降到该用户,它用作为jenkins用户运行的jenkins服务器替换pid 1。执行此操作所需的所有代码都位于以下git中:https://github.com/sudo-bmitch/jenkins-docker

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48697687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档