我创建了一个桥接网络,以便我的所有容器都在其中。
这是关于我的docker网络的信息(为了便于阅读,输出被截断):
docker network inspect bridge
"Name": "bridge",
"Containers": {
"4ae08..d80d": {
"Name": "zimidy.chat-server.staging",
},
"61cdb..1c4b": {
"Name": "zimidy.web-server.staging",
},
"8c45..d391": {
"Name": "zimidy.neo4j.staging",
},
"bcf..093": {
"Name": "zimidy.api.staging",
},
"ca1f..c5aa": {
"Name": "zimidy.web.staging",
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
}
但我无法从“zimidy.web-server.staging”访问“zimidy.web.staging”。
我尝试使用以下代码访问它:
HttpClient client = HttpClients.createDefault();
HttpGet requestToWebModule = new HttpGet("http://zimidy.web.staging:88/app");
HttpResponse responseFromWebModule = client.execute(requestToWebModule);
会引发以下错误:
java.net.UnknownHostException: zimidy.web.staging: Name or service not known
如何解决这个问题?
答案 0 :(得分:1)
“com.docker.network.bridge.default_bridge”:“true”
(注意:你实际上编辑了你的问题并在我写答案时删除了这篇文章)
来自docker networking documentation
连接到默认
bridge
网络的容器可以通过IP地址相互通信。 Docker不支持默认bridge
网络上的自动服务发现。如果您希望容器能够按容器名称解析IP地址,则应使用用户定义的网络。
据我所知,您说您创建了一个新网络,但无论出于何种原因,该网络的行为与默认网络相似,这意味着您无法通过主机名解析。
答案 1 :(得分:0)
默认桥接网络上的容器只能通过 IP 地址相互访问,除非您使用 --link
option?,这被认为是旧版。
更好的主意是使用 user-defined bridge networks?,在这种情况下,您可以在容器内按名称 ping 其他容器(此功能称为自动服务发现。)。
[注意]: