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