Openshift容器平台Jenkins无法运行docker build命令

时间:2018-06-20 22:24:57

标签: docker jenkins openshift jenkins-plugins docker-swarm

所以我正在使用一个稍微奇怪的基础架构:我有一个openshift容器平台,该平台具有使用镜像openshift3 / jenkins-2-rhel7在其中运行的docker的jenkins镜像

我正在尝试运行docker build。命令在jenkins管道中,并且出现“无法连接到Docker守护程序”错误。我不明白为什么将docker安装在计算机上但尚未运行,并且除cli和控制台外,我目前无法访问openshift服务器。是否有人对如何获得docker build有建议?命令可以在有或没有利用奴隶的情况下为詹金斯成功运行?

    node("master"){
        withEnv(["PATH=${tool 'docker'}/bin:${env.PATH}"]) {   
            docker.withRegistry( 'dockertest') {
            git url: "https://github.com/mydockertag/example.git", credentialsId: 'dockertest'
            stage "build"
            sh "docker build -t mydockertag/example -f ./Dockerfile ."
            stage "publish"
        }
    }

运行构建命令后,出现以下错误:

+ docker build -t mydockertag/example -f ./Dockerfile .
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the 
docker daemon running?

2 个答案:

答案 0 :(得分:0)

有两个错误原因:“无法在unix:///var/run/docker.sock上连接到Docker守护程序。Docker守护程序正在运行吗?”。

  1. Docker正在运行,但是执行docker命令的用户没有特权与'/var/run/docker.sock'交谈。尝试使用“ sudo docker build”。如果您不想每次都使用'sudo',则可以按照此处的docker安装后步骤(https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user)将用户添加到docker组。

  2. docker守护程序根本没有启动并正在运行。您将必须手动启动docker守护程序。

答案 1 :(得分:0)

默认情况下,OpenShift容器平台使用任意分配的用户ID运行容器。为了支持映像以任意用户身份运行,映像中的进程可能写入的目录和文件应归根组所有,并且可由该组读取/写入。要执行的文件还应该具有组执行权限。

在Dockerfile中添加以下内容可设置目录和文件许可权,以允许根组中的用户在构建的映像中访问它们:

RUN useradd -g root -G sudo  -u 1001 user && \
    chown -R user:root /some/directory && \
    chgrp -R 0 /some/directory && \
    chmod -R g=u /some/directory
#Specify the user with UID
USER 1001

请参阅Guideline中Openshift上的“支持任意用户ID”部分