我有一个如下所示的Dockerfile,该文件在org.ops4j.pax.logging.cfg文件中追加了一些行
FROM ubuntu:18.04
ENV DB_SERVER 1.1.1.1
ENV DB_SCHEMA mydb
ENV DB_USER myuser
ENV DB_PASSWORD mypass
RUN /bin/echo $'log4j.appender.DB.URL = jdbc:mysql://$DB_SERVER/$DB_SCHEMA\n\
log4j.appender.DB.user = $DB_USER\n\
log4j.appender.DB.password = $DB_PASSWORD\n'\
>> $KARAF_HOME/etc/org.ops4j.pax.logging.cfg
我期望上面的条目假定被附加到具有值的文件中,但是echo只是按原样附加。
答案 0 :(得分:1)
因此,如果要访问Dockerfile且命令不是入口点,则应将它们定义为ARG:
FROM ubuntu:18.04
ARG DB_SERVER=1.1.1.1
ARG DB_SCHEMA=mydb
ARG DB_USER=myuser
ARG DB_PASSWORD=mypass
RUN /bin/echo $'log4j.appender.DB.URL = jdbc:mysql://${DB_SERVER}/${DB_SCHEMA}\n\
log4j.appender.DB.user = ${DB_USER}\n\
log4j.appender.DB.password = ${DB_PASSWORD}\n'\
>> ${BPPM_HOME}/etc/org.ops4j.pax.logging.cfg
答案 1 :(得分:0)
使用单引号可以阻止对环境变量进行插值。将双引号与-e
的{{1}}标志一起使用(停止将换行符视为文字)。
echo
这对我来说非常有效。然后,我可以在Dockerfile中执行一个FROM ubuntu:18.04
ENV DB_SERVER 1.1.1.1
ENV DB_SCHEMA mydb
ENV DB_USER myuser
ENV DB_PASSWORD mypass
RUN /bin/echo -e "log4j.appender.DB.URL = jdbc:mysql://$DB_SERVER/$DB_SCHEMA\n\
log4j.appender.DB.user = $DB_USER\n\
log4j.appender.DB.password = $DB_PASSWORD\n"\
>> $KARAF_HOME/etc/org.ops4j.pax.logging.cfg
和一个RUN cat $KARAF_HOME/etc/org.ops4j.pax.logging.cfg
,它显示了两者的以下输出(分别在构建时和运行时):
CMD cat $KARAF_HOME/etc/org.ops4j.pax.logging.cfg