【问题标题】:Insert Docker parent host ip into container's hosts file将 Docker 父主机 ip 插入到容器的 hosts 文件中
【发布时间】:2014-11-11 11:47:32
【问题描述】:

我是 Docker 新手,并试图了解将 docker 父主机 ip 插入容器主机文件的最佳方法。

我在我的 Dockerfile 中使用以下命令

RUN /sbin/ip route|awk '/default/ { print $3,"\tdockerhost" }' >> /etc/hosts

但有时主机 ip 会发生变化,因此不再相关......

如果您问自己,这样做的原因是我需要访问另外 2 个 dockers 容器(并且链接不提供此功能)。

谢谢,

【问题讨论】:

  • 我需要 docker 主机的 ip 在 /etc/hosts 文件中。
  • 问题不在于 awk,而在于在错误的时间运行命令。有点像编译时与运行时。
  • 链接是实现它的方法,它意味着可以访问其他 docker 容器。更好地解释您的用例以及链接对您不起作用的原因。

标签: docker


【解决方案1】:

--add-host 选项就是为此而生的。因此,在您的 docker run 命令中,执行以下操作:

docker run --add-host dockerhost:`/sbin/ip route|awk '/default/ { print  $3}'` [my container]

【讨论】:

  • 您确定 arg 在主机 ip 更改后重新启动后也有效吗?看起来它只对创建有效......
  • 啊,你的意思是如果你让 Docker 在重启时重启你的容器?是的,那将是一个问题。您可以以不同的方式重新启动 - 请参阅docs.docker.com/articles/host_integration。如果您想要一个动态方案来解析地址,也许使用 DNS?
  • 命令/sbin/ip route|awk '/default/ { print $3}'在docker主机中运行,而不是在docker容器中运行,会产生错误的ip结果。
  • @santiago 这是 OP 要求的。
  • 有谁知道是否可以将它与 Docker compose 的 extra_hosts: 配置一起使用?
【解决方案2】:

--add-host 选项可以在您创建/运行容器时使用,但由于/sbin/ip 命令在 OSX 等操作系统中不可用,我们可以使用更通用的解决方案:
docker run --add-host=dockerhost:`docker network inspect \ --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}' bridge` [IMAGE]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-11
    • 2019-03-26
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    相关资源
    最近更新 更多