在Docker容器中,我想连接到驻留在本地网络上的MySQL数据库。但是,我收到错误,因为它找不到主机名,因此我目前的热修复方法是对IP进行硬编码(必然会在某些时候更改)。
因此;是否可以在docker run
将主机名从主机转发到Docker容器?
答案 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名称,因此它应该可以直接使用。
我记得在我的公司网络中遇到过类似的问题,我通过使用remote
在our-database.mycompany.com
服务器中引用FQDN - our-database
instad解决了问题。
希望这有帮助。
答案 2 :(得分:0)
人们提出了类似的问题并得到了很好的答案:
How do I pass environment variables to Docker containers?
或者,您可以配置为docker机器提供服务的DHCP / DNS服务器以正确解析主机名。 DDNS是另一种可以简化配置的选项。