Docker从bashrc读取值形式

时间:2018-12-05 23:35:21

标签: java bash docker dockerfile

我试图在docker文件中运行一个Java jar,并尝试读取bashrc中设置的jvm arg。这个值是使用shell脚本设置的。但是当我检查在容器内运行的Java进程时,在进程输出中看不到jvm arg。 bashrc中存在值。 另外echo $ JVM_ARGS还在容器内显示正确的值。 Dockerfile

FROM quay.io/nord-store-eng/base-java8:1.1.1
RUN mkdir -p /opt/test
COPY ./docker.jar /opt/test/docker.jar
COPY ./setenv.sh /opt/test/setenv.sh
RUN chmod +x /opt/test/setenv.sh
RUN /opt/test/setenv.sh
CMD ["sh","-c","java $JVM_ARGS -jar /opt/test/docker.jar"]

过程输出 ps command output

1 个答案:

答案 0 :(得分:0)

我怀疑问题是您使用的是sh,而不是从bashrc中读取。

  

-norc不要读取和执行系统范围的初始化文件   /etc/bash.bashrc和个人初始化文件〜/ .bashrc(如果   外壳是交互式的。如果外壳为   作为sh调用。   -https://unix.stackexchange.com/a/94494/54089

您可以尝试指定“ bash”而不是“ sh”吗?

CMD ["bash","-c","java $JVM_ARGS -jar /opt/test/docker.jar"]

或保持sh(例如alpine没有bash):

CMD ["sh","-c","source ~/.bashrc; java $JVM_ARGS -jar /opt/test/docker.jar"]

或保持sh,bashrc的绝对路径:

CMD ["sh","-c","source /root/.bashrc; java $JVM_ARGS -jar /opt/test/docker.jar"]