繁体   English   中英

如何在桥接网络中按名称访问 docker 容器?

[英]How to access docker container by name within a bridge network?

我创建了一个桥接网络,以便我所有的容器都在其中。

这是关于我的 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

如何解决这样的问题?

“com.docker.network.bridge.default_bridge”:“真”

(注意:您实际上编辑了您的问题并在我写答案时删除了这篇文章)

来自docker 网络文档

连接到默认bridge网络的容器可以通过 IP 地址相互通信。 Docker 不支持默认bridge网络上的自动服务发现。 如果您希望容器能够通过容器名称解析 IP 地址,则应改用用户定义的网络。

我知道您说您创建了一个新网络,但无论出于何种原因,该网络的行为都与默认网络相似,这意味着您无法通过主机名进行解析。

默认桥接网络上的容器只能通过 IP 地址相互访问,除非您使用--link选项🔗 ,这被认为是遗留的。

更好的想法是使用用户定义的桥接网络🔗,在这种网络中,您可以从容器内通过名称 ping 其他容器(此功能称为自动服务发现。)。


[注意]:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM