这是我的码头图片。我想覆盖下面从最后提到的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"]要在本地运行:
docker run -p 8080:8080 -e dummy_url=http:google.com -e database=jdbc://mysql allimages/myimage:latest在我添加的文件- test.properties中,dummy_url和数据库似乎没有被覆盖。任何想法都将不胜感激。
发布于 2018-01-12 01:15:40
我想覆盖下面设置的默认环境变量,不管在最后提到的docker run命令中传递了什么
这意味着在将镜像作为容器(/usr/local/tomcat/conf/test.properties)运行时覆盖镜像文件(docker run),而不是构建镜像(docker build及其--build-args option及其ARG Dockerfile条目)。
这意味着您将在本地创建一个脚本文件,该文件:
/usr/local/tomcat/conf/test.propertiescatalina.sh run $@ (另请参阅来自的“Store Bash script arguments $@ in a variable这就是:
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[@]}"您将修改该脚本的Dockerfile to COPY并将其命名为:
COPY myscript.sh /usr/local/
...
ENTRYPOINT ["/usr/local/myscript.sh"]然后,也只有到那时,docker run的-e选项才会起作用。
发布于 2018-01-11 16:26:02
您混淆了构建镜像时执行的内容和启动容器时执行的内容。运行docker build ...时,构建镜像时会执行dockerfile中的RUN命令
RUN echo dummy_url =$dummy_url >> /usr/local/tomcat/conf/test.properties
RUN echo database =$database >> /usr/local/tomcat/conf/test.properties因此,当执行上面的代码时,文件test.properties将包含Dockerfile文件中指定的默认值。
当您执行docker run -p 8080:8080 -e dummy_url=http:google.com -e database=jdbc://mysql allimages/myimage:latest时,将使用env值dummy_url=http:google.com和database=jdbc://mysql来执行ENTRYPOINT ["catalina.sh", "run"]。
您可以使用以下命令来允许test.properties中的值为ovveriden:
$dummy_url >> /usr/local/tomcat/conf/test.properties和$database >> /usr/local/tomcat/conf/test.properties移到catalina.sh脚本的开头。构建镜像时,
ARG dummy_url_arg
ARG database_arg
ENV dummy_url $dummy_url_arg
ENV database $database_arg
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"]当构建时,图像使用docker build --build-arg dummy_url_arg=http:google.com --build-arg database_arg=jdbc://mysql allimages/myimage:latest ...覆盖这些值
https://stackoverflow.com/questions/48201823
复制相似问题