在 docker 镜像中传递 docker 运行时环境变量

Rig*_*hto 8 docker dockerfile

这是我的码头工人形象。我想从最后提到的 docker run 命令中传递的任何内容覆盖下面设置的默认环境变量

FROM ubuntu:16.04

ADD http://www.nic.funet.fi/pub/mirrors/apache.org/tomcat/tomcat-8/v8.0.48/bin/apache-tomcat-8.0.48.tar.gz /usr/local/
RUN cd /usr/local && tar -zxvf apache-tomcat-8.0.48.tar.gz && rm apache-tomcat-8.0.48.tar.gz
RUN mv /usr/local/apache-tomcat-8.0.48 /usr/local/tomcat
RUN rm -rf /usr/local/tomcat/webapps/*

ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
ENV CATALINA_HOME /usr/local/tomcat
ENV CATALINA_BASE /usr/local/tomcat
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

ENV dummy_url defaulturl
ENV database databasedefault

COPY my.war /usr/local/tomcat/webapps/

RUN echo >> /usr/local/tomcat/conf/test.properties
RUN echo dummy_url =$dummy_url >> /usr/local/tomcat/conf/test.properties
RUN echo database =$database >> /usr/local/tomcat/conf/test.properties

ENTRYPOINT ["catalina.sh", "run"]
Run Code Online (Sandbox Code Playgroud)

在本地运行:

docker run -p 8080:8080 -e dummy_url=http:google.com -e database=jdbc://mysql allimages/myimage:latest
Run Code Online (Sandbox Code Playgroud)

dummy_url 和数据库似乎没有在我添加它们的文件中被覆盖 - test.properties。任何想法将不胜感激。

Von*_*onC 7

我想从最后提到的 docker run 命令中传递的内容覆盖下面设置的默认环境变量

/usr/local/tomcat/conf/test.properties这意味着在将映像作为容器 ( )运行时覆盖映像文件 ( docker run),而不是构建映像(docker build及其--build-args选项及其ARGDockerfile 条目)。

这意味着您在本地创建一个脚本文件,其中:

那是:

myscript.sh

#!/bin/sh
echo dummy_url=$dummy_url >> /usr/local/tomcat/conf/test.properties
echo database=$database >> /usr/local/tomcat/conf/test.properties
args=("$@")
catalina.sh run "${args[@]}"
Run Code Online (Sandbox Code Playgroud)

您可以将DockerfileCOPY修改为该脚本并调用它:

COPY myscript.sh /usr/local/
...
ENTRYPOINT ["/usr/local/myscript.sh"]
Run Code Online (Sandbox Code Playgroud)

然后,也只有到那时,-edocker run 的选项才会起作用。