仅针对特定位置运行 mkdir 时 Dockerfile 构建失败

vm3*_*m31 1 git git-checkout jenkins

我们的应用程序是一组 Docker 容器,我的 Dockerfile 如下所示:

\n\n
FROM jenkins/jenkins:lts\nMAINTAINER xyz\nRUN mkdir -p /opt/service\nWORKDIR /opt/service\nARG NODE_ENV\nENV NODE_ENV=$NODE_ENV\nCOPY package.json /opt/service\nCOPY package-lock.json /opt/service\nRUN npm install\nCOPY . /opt/service\nCMD [ "npm", "start" ]\n
Run Code Online (Sandbox Code Playgroud)\n\n

位置 1:myproject/jenkins/dockerfile -无法执行 mkdir

\n\n
mkdir: cannot create directory \xe2\x80\x98/opt/service\xe2\x80\x99: Permission denied\nThe command \'/bin/sh -c mkdir -p /opt/service\' returned a non-zero code: 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

位置 2:myproject/frontend/dockerfile - docker 文件的相同副本构建良好

\n\n

我的 docker-compose 文件以以下内容结尾:

\n\n
app:\n  build:\n    context: .\n    dockerfile: jenkins/Dockerfile\n
Run Code Online (Sandbox Code Playgroud)\n

Vic*_*ong 6

位置 1 给出了预期结果,但我不明白为什么位置 2 可以成功构建。

\n\n

使用 jenkins/jenkins:lts 图像的默认用户是jenkins,他没有在/opt创建文件夹的权限。

\n\n

我启动了 jenkins/jenkins:lts 容器并运行相同的命令:

\n\n
jenkins@b4890ac012a6:/$ mkdir -p /opt/service\nmkdir: cannot create directory \xe2\x80\x98/opt/service\xe2\x80\x99: Permission denied\n\n# Equivalently\njenkins@b4890ac012a6:/opt$ mkdir service\nmkdir: cannot create directory \xe2\x80\x98service\xe2\x80\x99: Permission denied\n
Run Code Online (Sandbox Code Playgroud)\n\n

要解决此问题,您需要切换到 USER root首先创建目录:

\n\n
....\nUSER root\nRUN mkdir -p /opt/service\nUSER jenkins\n....\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者你可以选择jenkins有可执行权限的路径。

\n