【问题标题】:How to access docker container by name within a bridge network?如何在桥接网络中按名称访问 docker 容器?
【发布时间】:2018-01-17 14:09:54
【问题描述】:

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

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

如何解决这样的问题?

【问题讨论】:

  • 你是如何创建网络的,你是如何运行你的容器的?确切的命令将是理想的。

标签: java docker docker-compose


【解决方案1】:

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

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

来自docker networking documentation

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

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

【讨论】:

    【解决方案2】:

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

    更好的办法是使用user-defined bridge networks?,在该容器中,您可以按名称 ping 其他容器(此功能称为自动服务发现。)。


    [注意]:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多