我正在尝试创建一个Dockerfile,但是如果我添加一个User,它会在构建过程中一直失败。如果我删除用户,图像的构建过程成功,但我需要用户,因为它是我正在处理的Code Climate引擎的要求。
Dockerfile:
FROM java
MAINTAINER DavidRenz
RUN groupadd app -g 9000 && useradd -g 9000 -u 9000 -r -s /bin/false app
VOLUME /code
WORKDIR /code
COPY . /usr/src/app
USER app
RUN javac /usr/src/app/bin/Pmd.java
CMD ["java", "/usr/src/app/bin/Pmd"]
日志:
Step 7 : USER app
---> Running in 896795a6bb63
---> 09c5179159a8
Removing intermediate container 896795a6bb63
Step 8 : RUN javac /usr/src/app/bin/Pmd.java
---> Running in 3e1a335f8edf
javac: file not found: /usr/src/app/bin/Pmd.java
Usage: javac <options> <source files>
use -help for a list of possible options
The command '/bin/sh -c javac /usr/src/app/bin/Pmd.java' returned a non-zero code: 2
答案 0 :(得分:1)
这看起来像是权限错误:在USER app
命令之前,您的容器以root
运行,因此/usr/src/app
归root
所有,并且不可读取app
用户。
我相信如果您使用以下步骤替换USER app, RUN javac...
序列,它将起作用:
RUN javac /usr/src/app/bin/Pmd.java
RUN chmod -R app:app /usr/src/app
USER app