我们的应用程序是一组Docker容器,我的Dockerfile如下:
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
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文件副本构建良好
我的docker-compose文件结尾为:
app:
build:
context: .
dockerfile: jenkins/Dockerfile
答案 0 :(得分:1)
位置1提供了预期的结果,我不明白为什么位置2可以成功构建。
使用jenkins / jenkins:lts图像的默认用户是 jenkins ,该用户没有特权在 / opt 中创建文件夹。
我启动了一个jenkins / jenkins:lts容器并运行相同的命令:
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 来创建目录:
....
USER root
RUN mkdir -p /opt/service
USER jenkins
....
或者您可以选择 jenkins 具有可执行权限的路径。