git - 仅针对特定位置运行 mkdir 时 Dockerfile 构建失败
问题描述
我们的应用程序是一组 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 给出了预期的结果,我不明白为什么位置 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具有可执行权限的路径。
推荐阅读
- mongodb - Mongoose Schema 规划:使用 ObjectID 引用还是使用类型数组:[otherSchema]?
- node.js - 安装 Foundation 模板,未安装节点模块
- docker - 如何在 Docker 容器中运行 AWS Lambda 层?
- javascript - 正在寻找我的不和谐机器人的 8ball 命令的修复程序
- powershell - 默认参数集不是通过 if 语句运行的
- python - 如何知道哪些分隔符分隔了拆分中的元素?
- python - 如何防止并行 python 退出并出现“OSError:[Errno 35] 资源暂时不可用”?
- xml - 在 DXL 中从 XML 解析 CDATA
- lottie - 有没有可以解决这个问题的标签?
- r - 比较共现矩阵