当用户尝试执行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/app
被root
拥有,而不能被app
用户读取。
我相信如果你用下面的步骤replaceUSER app, RUN javac...
序列,它将工作:
RUN javac /usr/src/app/bin/Pmd.java RUN chmod -R app:app /usr/src/app USER app