仅在特定位置运行mkdir时Dockerfile构建失败 [英] Dockerfile build fails when running mkdir only for particular locations
问题描述
我们的应用程序是一组Docker容器,我的Dockerfile如下:
Our application is a set of docker containers, my Dockerfile looks like:
FROM jenkins/jenkins:lts
MAINTAINER xyz
RUN mkdir -p /opt/service
WORKDIR /opt/service
ARG NODE_ENV
ENV NODE_ENV=$NODE_ENV
COPY package.json /opt/service
COPY package-lock.json /opt/service
RUN npm install
COPY . /opt/service
CMD [ "npm", "start" ]
位置1:myproject/jenkins/dockerfile-它无法执行mkdir
Location 1: myproject/jenkins/dockerfile - it fails to perform mkdir
mkdir: cannot create directory ‘/opt/service’: Permission denied
The command '/bin/sh -c mkdir -p /opt/service' returned a non-zero code: 1
位置2:myproject/frontend/dockerfile-相同的docker文件副本可以很好地构建
Location 2: myproject/frontend/dockerfile - the same copy of docker file builds well
我的docker-compose文件结尾为:
My docker-compose file ends with:
app:
build:
context: .
dockerfile: jenkins/Dockerfile
推荐答案
位置1提供了预期的结果,我不明白为什么位置2可以成功构建.
Location 1 gives the expected result and I don't see why location 2 could build successfully.
使用jenkins/jenkins:lts图像的默认用户是 jenkins ,该用户没有特权在/opt 中创建文件夹.
The default user using jenkins/jenkins:lts image is jenkins, who DOES NOT have privilege to create folder at /opt .
我启动了一个jenkins/jenkins:lts容器并运行了相同的命令:
I launched the a jenkins/jenkins:lts container and ran the same command:
jenkins@b4890ac012a6:/$ mkdir -p /opt/service
mkdir: cannot create directory ‘/opt/service’: Permission denied
# Equivalently
jenkins@b4890ac012a6:/opt$ mkdir service
mkdir: cannot create directory ‘service’: Permission denied
要解决此问题,您需要先切换到USER root 来创建目录:
To solve this, you need to either switch to USER root to create the directory first:
....
USER root
RUN mkdir -p /opt/service
USER jenkins
....
或者您可以选择 jenkins 具有可执行权限的路径.
Or you can pick a path that jenkins has executable permission.
这篇关于仅在特定位置运行mkdir时Dockerfile构建失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!