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

时间:2018-10-03 14:23:28

标签: git jenkins git-checkout

我们的应用程序是一组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

1 个答案:

答案 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 具有可执行权限的路径。