我试图在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"]
答案 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"]