这个问题可能是针对所有的码头大师。但让我先给出一些背景。我面临dns解析问题(在docker的默认网络“桥接”上),直到我阅读了https://docs.docker.com/engine/userguide/networking/文档中的以下内容
上面的docker网络检查命令显示了给定网络上所有连接的容器及其网络资源。此默认网络中的容器能够使用IP地址相互通信。Docker不支持默认桥网络上的自动服务发现。如果要与此默认桥接器网络中的容器名称通信,则必须通过遗留码头运行链接选项连接容器。
当--link选项被弃用时,使任何docker run命令挂起,并最终粉碎停靠守护进程(本地),我尝试使用不同的桥接用户网络并将虚拟实例固定在它上。
docker network create -d bridge --subnet=172.15.0.0/16
--gateway=172.15.0.1
-o com.docker.network.bridge.default_bridge=false
-o com.docker.network.bridge.enable_icc=true
-o com.docker.network.bridge.enable_ip_masquerade=true
-o com.docker.network.driver.mtu=1500
-o com.docker.network.bridge.name=docker1
-o com.docker.network.bridge.host_binding_ipv4=0.0.0.0 a
docker run --name db1 -e MYSQL_ROOT_PASSWORD=a -d mysql:5.7.16
docker run --name db2 -e MYSQL_ROOT_PASSWORD=a -d mysql:5.7.16
docker network connect --ip 172.15.0.40 a db1
docker network connect --ip 172.15.0.40 a db2现在,通过--name命名的服务/容器的解析使用ping可以很好地工作,但问题是:
为什么在默认网桥网络上服务/容器名称解析不可能?
如果任何码头网络专家都能给点提示的话,那就太好了。致以问候。
发布于 2016-12-30 22:04:46
为什么在默认网桥网络上服务/容器名称解析是不可能的?
没有技术上的原因,这是不可能的,但决定保持向后兼容性。
默认(“桥”)网络从来不支持通过内置的DNS进行服务发现,而且当该特性正在开发时,一些项目的维护人员担心他们不希望在默认网络中添加该功能,因为它会阻止其他实现。
此外,定制网络被设计成显式地允许容器进行通信。在默认网络上,这是通过禁用“容器间通信”(--icc=false)和使用--link在容器之间建立链接来实现的。自动发现连接到默认网络的任何容器将使使用起来更加复杂。
因此,创建一个自定义网络,并将容器附加到该网络,如果它们能够相互通信的话。
请注意,在许多情况下,并不需要您指定的所有选项;简单地运行docker network create foo对于大多数用例都是有效的。
https://stackoverflow.com/questions/41400603
复制相似问题