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

我正在尝试创build一个Dockerfile,但是如果我添加一个用户,它在构build过程中会一直失败。 如果我删除用户,图像的构build过程就成功了,但是我需要用户,因为这是我正在使用的代码环境引擎的一个要求。

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 

这看起来像是一个权限错误:直到您的USER app命令,您的容器以root身份运行,所以/usr/src/approot拥有,而不能被app用户读取。

我相信如果你用下面的步骤replaceUSER app, RUN javac...序列,它将工作:

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