当前位置: 首页 > 知识库问答 >
问题:

如何在"docker build"期间更新Docker镜像中 /etc/hosts文件

墨财
2023-03-14

我想在“docker build”期间更新我的/etc/hosts文件。

我在Dockerfile中添加了以下行,但它既没有更新文件,也没有给出任何错误。

RUN echo "192.168.33.11    mynginx" >> /etc/hosts

我需要更新主机。有人能对此提出建议吗?

共有3个答案

丘向荣
2023-03-14

我认为docker最近添加了--add-host标志到docker build,这真的很棒。

[编辑]所以这个功能是在17.04.0-ce上更新的

有关如何将docker build与添加主机标志一起使用的更多详细信息,请访问:https://docs.docker.com/edge/engine/reference/commandline/build/

华子昂
2023-03-14

您不能使用运行步骤中的echo修改图像中的主机文件,因为当您从图像启动容器时,docker守护进程将维护文件(/etc/hosts)及其内容(hosts条目)。

但是,可以使用以下方法实现相同的效果:

ENTRYPOINT ["/bin/sh", "-c" , "echo 192.168.254.10   database-server >> /etc/hosts && echo 192.168.239.62   redis-ms-server >> /etc/hosts && exec java -jar ./botblocker.jar " ]

这里要注意的关键是使用exec命令,就像docker留档建议的那样。使用exec将使java命令成为容器的PID 1。Docker中断只会对此做出响应。

https://docs.docker.com/engine/reference/builder/#entrypoint

谢学名
2023-03-14

在docker的最新版本中,这可以通过docker compose及其额外的主机指令来实现

添加主机名映射。
使用与docker runClient--add-host参数相同的值(应该已经可用于docker 1.8)。

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

简而言之:在运行容器时,而不是在构建容器时,修改容器的主机。

在Docker 17.x中,您有一个下面提到的Docker构建——添加主机,但是,正如在第34078期和本回答中所评论的那样:

构建期间添加主机功能旨在允许在构建期间重写主机,但不允许在映像中保留该配置。

上述解决方案确实参考了我在上面建议的docker compose:

  • 运行内部DNS;您可以设置在守护进程中使用的默认DNS服务器;这样,默认情况下,每个启动的容器将自动使用配置的DNS
  • 使用docker compose并提供docker compose。yml给您的开发人员
 类似资料:
  • 问题内容: 我想这样做,以便我启动的Docker容器使用与我运行的主机相同的设置。有没有办法做到这一点? 我知道docker run 有一个选项,但这并不是我想要的,因为主机的文件在不同的机器上可能不同,所以用硬编码确切的IP /主机对我来说不是很好。 问题答案: 使用在泊坞窗运行命令。这告诉Docker使容器使用主机的网络堆栈。您可以在此处了解更多信息。

  • 设置IP地址与主机名对应表,可用该文件来进行主机名称解释。如: #格式:IP地址 主机名 别名 127.0.0.1 localhost localhost.localdomain 192.168.1.1 debian debian 192.168.0.2 t02 t02.tiger 192.168.0.4 t04 t04.tiger

  • 与 和别名,如 Im可以用inetaddress.getbyname(“bar.com”)解析bar.com。但如果行变得更大,比如30个主机,并且长度超过767个字符,则会抛出一个UnknownHostException。 该如何让Java处理好这条线? 例如,“ping bar.com”可以正确地进行查找。

  • 要在 /etc/hosts 文件里配置网卡的 IP 地址、FQDN 和可能会用的别名,语法如下: <IP address> myhost.example.org aliases 除非您的计算机在 Internet 上是可访问的(例如,有一个注册的域名并分配到了一个合法的 IP 地址(块)(大多数用户没有)),请确保 IP 地址在私有网络 IP 地址范围内,正确的范围是: 类别 网络

  • 有人知道如何编辑 /etc/hosts文件内运行在牛轧糖android工作室模拟器?我将编辑它,这样我就可以在我的本地网络服务器上使用我的虚拟主机。我试图编辑它通过终端使用adb然而,它返回只读文件系统。也尝试使用chmod,但仍然失败。 更新:我还尝试使用adb$拉入和推送文件/adb-s emulator-5554推送~/Desktop/hosts/system/etc/hosts adb:错

  • 问题内容: 据我所知,泊坞窗映像在安装时即已安装。有没有办法更改此位置,例如更改为已安装的卷? 问题答案: 对于最新版本的Docker,您可以在中 (根据https://docs.docker.com/engine/reference/commandline/dockerd/#daemon- configuration- file )将参数的值设置为自定义路径。 对于较旧的版本,您可以在启动Doc