当用户尝试执行javac时,构建Docker镜像失败

时间:2016-04-21 10:58:33

标签: java docker dockerfile

我正在尝试创建一个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

1 个答案:

答案 0 :(得分:1)

这看起来像是权限错误:在USER app命令之前,您的容器以root运行,因此/usr/src/approot所有,并且不可读取app用户。

我相信如果您使用以下步骤替换USER app, RUN javac...序列,它将起作用:

RUN javac /usr/src/app/bin/Pmd.java
RUN chmod -R app:app /usr/src/app

USER app