【问题标题】:sbt-native-packager docker: How to add entry in /etc/hostssbt-native-packager docker:如何在 /etc/hosts 中添加条目
【发布时间】:2017-07-10 08:54:16
【问题描述】:

我正在使用 sbt-native-packager 的 docker 插件来构建 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 被覆盖了!

这样做的正确方法是什么?

【问题讨论】:

    标签: docker hosts sbt-native-packager


    【解决方案1】:

    /etc/hosts 文件由 Docker 管理,不能作为构建镜像的一部分进行自定义。

    如您所见,您可以使用RUN echo 8.8.8.8 foo > /etc/hosts; <some_command_requiring_custom_hosts_file> 添加自定义条目。但此修改仅在执行此特定RUN 命令期间可用。

    如果您在运行容器时需要自定义条目,请使用docker run--add-host 参数(请参阅docs)。

    一般来说,最好不要在 Docker 映像中包含配置详细信息。仅在运行容器时应用配置有助于保持图像的可移植性。

    【讨论】:

      【解决方案2】:

      是的,Docker 会覆盖该文件(实际上,它是存在于主机系统中的文件,在容器启动时挂载在该位置),因此您所做的任何更改都将被覆盖。

      一种选择是将 docker 入口点更改为,而不是指向您的应用程序启动脚本,而是指向一个执行该更改的脚本,然后运行您的应用程序启动脚本。

      所以在普通的 docker 中(对不起,我从未使用过 sbt docker 插件),而不是进入你的应用程序启动脚本(使用 /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
      

      【讨论】:

        猜你喜欢
        • 2016-07-27
        • 1970-01-01
        • 2014-08-08
        • 2014-04-23
        • 2015-10-03
        • 2014-05-04
        • 2016-08-17
        • 2013-12-29
        • 1970-01-01
        相关资源
        最近更新 更多