sbt-native-packager docker:如何在/ etc / hosts中添加条目
我正在使用sbt-native-packager的docker插件来构build一个Docker镜像。 我希望我的映像在/ etc / hosts中有一个额外的条目。
我已经尝试了以下内容:
dockerCommands in Docker := dockerCommands.value.flatMap { case cmd@Cmd("FROM", _) => List(Cmd("FROM", "anapsix/alpine-java")) ++ List( Cmd("ENV", "JAVA_MIN_MEM", "1024m"), Cmd("RUN", "echo 8.8.8.8 foo >> /etc/hosts") ) }
不幸的是,似乎没有工作。 当我启动一个基于这个映像的容器时,/ etc / hosts没有额外的条目。
它看起来像是实际上写文件,因为我尝试了下面的代码:
.... Cmd("RUN", "echo 8.8.8.8 foo >> /etc/hosts; ping -c 4 foo") ....
我得到如下输出:
[info] Step 9/15 : RUN echo 8.8.8.8 foo >> /etc/hosts; ping -c 4 foo [info] ---> Running in b6d7ba25f96f [info] PING foo (8.8.8.8): 56 data bytes [info] 64 bytes from 8.8.8.8: seq=0 ttl=37 time=5.521 ms [info] 64 bytes from 8.8.8.8: seq=1 ttl=37 time=3.188 ms [info] 64 bytes from 8.8.8.8: seq=2 ttl=37 time=6.012 ms [info] 64 bytes from 8.8.8.8: seq=3 ttl=37 time=4.192 ms
所以它看起来像修改/ etc / hosts被覆盖!
什么是正确的方法来做到这一点?
文件/etc/hosts
由Dockerpipe理,不能作为构build映像的一部分进行定制。
正如你已经知道的那样,你可以使用RUN echo 8.8.8.8 foo > /etc/hosts; <some_command_requiring_custom_hosts_file>
来添加一个自定义条目RUN echo 8.8.8.8 foo > /etc/hosts; <some_command_requiring_custom_hosts_file>
RUN echo 8.8.8.8 foo > /etc/hosts; <some_command_requiring_custom_hosts_file>
。 但是这个修改只有在执行这个特定的RUN
命令时才可用。
如果在运行容器时需要自定义条目,请使用docker run
的--add-host
参数(请参阅文档 )。
一般来说,最好不要在Docker映像中包含configuration细节。 仅在运行容器时应用configuration有助于保持图像的可移植性。
是的,Docker将覆盖该文件(实际上,这是一个文件存在于主机系统中,当容器启动时该文件位于该位置),所以您在那里做的任何更改都将被重写。
一种select是将docker入口点改为,而不是指向你的应用程序启动脚本,而是指向一个脚本,它会改变,然后运行你的app启动脚本。
所以在朴素泊坞窗(对不起,我从来没有使用sbtdocker插件),而不是有一个入口到您的应用程序启动脚本(使用/usr/bin/myapp
):
ENTRYPOINT /usr/bin/myapp
你将会拥有
RUN echo "echo 8.8.8.8 foo > /etc/hosts" >> /startup.sh RUN echo "/usr/bin/myapp" >> /startup.sh RUN chmod +x /startup.sh ENTRYPOINT /startup.sh