所以我正在使用一个稍微奇怪的基础架构:我有一个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?
答案 0 :(得分:0)
有两个错误原因:“无法在unix:///var/run/docker.sock上连接到Docker守护程序。Docker守护程序正在运行吗?”。
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组。
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”部分