将DNS主机名转发到Docker容器

时间:2018-04-06 12:16:03

标签: docker connection hostname

在Docker容器中,我想连接到驻留在本地网络上的MySQL数据库。但是,我收到错误,因为它找不到主机名,因此我目前的热修复方法是对IP进行硬编码(必然会在某些时候更改)。

因此;是否可以在docker run将主机名从主机转发到Docker容器?

3 个答案:

答案 0 :(得分:1)

是的,有可能。只需在运行hostname命令时注入docker run变量:

$ hostname
np-laptop

$ docker run -ti -e HOSTNAME=$(hostname) alpine:3.7
/ # env
HOSTNAME=np-laptop
SHLVL=1
HOME=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/

<强>更新

我认为你可以针对你的具体情况用docker run做两件事:

1。/etc/hosts文件从主机绑定到容器。

2. 在具有--dns标记的容器中定义您想要的任何dns服务器。

所以,最后命令是:

docker run -ti -v /etc/hosts:/etc/hosts --dns=<IP_of_DNS> alpine:3.7

答案 1 :(得分:1)

默认情况下,Docker容器可以访问主机网络,并且他们可以使用主机上配置的DNS服务器解析DNS名称,因此它应该可以直接使用。

我记得在我的公司网络中遇到过类似的问题,我通过使用remoteour-database.mycompany.com服务器中引用FQDN - our-database instad解决了问题。

希望这有帮助。

答案 2 :(得分:0)

人们提出了类似的问题并得到了很好的答案:

How do I pass environment variables to Docker containers?

或者,您可以配置为docker机器提供服务的DHCP / DNS服务器以正确解析主机名。 DDNS是另一种可以简化配置的选项。