想象一下,我有这样的设置:
1.0.0.1
; 私有主机名: machine1.internal.domain
2.0.0.1
; 公共主机名: machine1.example.com
1.0.0.2
; 私有主机名: machine2.internal.domain
2.0.0.2
; 公共主机名: machine2.example.com
这两台机器都在DMZ中。
Machine1需要使用内部主机名连接到machine2。 有一点很重要:我们不希望这两者之间有任何交通stream量进入非军事区。 并且主机名machine2.internal.domain
在机器#1上运行的应用程序中被硬编码。
没有Dockerized设置:
machine2.internal.domain
,一切都已经好了。 /etc/hosts
中添加一个条目: machine2.internal.domain 1.0.0.2
使用Docker化设置,我知道名称parsing不起作用时,Docker容器无法访问machine2,因为它不会inheritance/etc/hosts
的/etc/hosts
的条目。
我怎样才能使这件事情最好的方式? …对于这两种情况:DNSparsing工作,不工作。
我已经审查了案例2的以下选项:
docker run --add-host machine2.internal.domain:1.0.0.2 ...
machine2.internal.domain
IP:一次在/etc/hosts
,一次在Docker中运行命令 docker blabla --net=host
如果你有一个内部的DNS服务器,你可以使用–dns = []选项运行docker应用程序。
当名称查找失败时,将您的内部DNS服务器设置为真实DNS的转发器,这样任何内部名称都将使用内部地址。
另一个select是将自定义主机文件写入您的泊坞窗图像,如果它们是固定的,但是并不总是理想的。
第三种方法是考虑使用像skydns的东西。 如果你的docker主机运行的是CoreOS,或者你有一个etcd2集群也可以。
到目前为止,最好的select是让你的主机通过一些发现机制来解决问题,而不依赖于DNS。 但是,他们通常会要求etcd2或consul。