这是我的码头工人形象。我想从最后提到的 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。任何想法将不胜感激。
我想从最后提到的 docker run 命令中传递的内容覆盖下面设置的默认环境变量
/usr/local/tomcat/conf/test.properties
这意味着在将映像作为容器 ( )运行时覆盖映像文件 ( docker run
),而不是构建映像(docker build
及其--build-args
选项及其ARG
Dockerfile 条目)。
这意味着您在本地创建一个脚本文件,其中:
/usr/local/tomcat/conf/test.properties
catalina.sh run $@
(另请参阅“访问 bash 命令行参数vs ”中的“将 Bash 脚本参数 $@ 存储在变量中” )$@
$*
那是:
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)
然后,也只有到那时,-e
docker run 的选项才会起作用。
归档时间: |
|
查看次数: |
13999 次 |
最近记录: |