如何通过url而不是正在运行的容器内的ip地址访问服务器

时间:2018-07-21 03:21:10

标签: docker networking containers

我有一个正在运行的debian容器,在该容器中,我可以通过其ip ping服务器,如下所示:

ping 9.1.1.1

但如果我这样做:

ping fileserver01

它将生成错误,表示无法访问。

但是它们在主机(ubuntu)中都可以正常工作。我有什么办法可以解决?谢谢!

2 个答案:

答案 0 :(得分:1)

快速解决方案是在docker运行时使用--add-host,或者如果您使用compose,则使用extra_hosts-

例如-

docker run -it --add-host fileserver01:9.1.1.1 debian ....

这会将主机条目放入您的/etc/hosts-

ubuntu@ip-10-0-0-186:~$ sudo docker run -it --add-host fileserver01:9.1.1.1 debian bash -c "cat /etc/hosts ; ping fileserver01"
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
9.1.1.1 fileserver01
172.17.0.4  23f2df5d9b24

  PING fileserver01 (9.1.1.1) 56(84) bytes of data.
    ^C
    --- fileserver01 ping statistics ---
    8 packets transmitted, 0 received, 100% packet loss, time 6999ms

答案 1 :(得分:0)

如果您要创建一个新的容器,它将位于默认的网桥网络中。

默认情况下,桥接网络没有DNS服务器。

您可以做两件事:

1。)将容器置于默认的网桥网络中,并使用--link选项手动配置容器以相互了解。

docker run -d -P --name <container1> --link <container2>

2。)创建一个新网络并在创建容器时使用--network选项。

docker run -d --name <container_name> --network <network_name>

同一网络中的容器可以通过引用容器名称而不是IP地址进行交互。

docker container exec -it <container1_name> ping <container2_name>

-link是旧选项,因此可以在功能中删除。

  

这是用于识别其他容器的容器。

希望这对您有帮助!