无法通过桥接网络上的别名或名称连接到容器

Can't connect to the container neither by alias nor by name on the bridge network

我在网上找到的所有示例都是在演示如何通过 alias/name 创建自己的网络连接到另一个容器时找到的。

# create the network
$ docker network create my-network

# create the containers and connect them to the network
$ docker run --name service-one --network my-network ...
$ docker run --name service-two --network my-network ...

Now within the service-one container we can connect to service-two by its by its container name service-two (instead of localhost)! The same is true from service-two to service-one using the latter’s alias.

我想在不创建自己的网络的情况下使用默认的bridge网络来做同样的事情可能吗?如果不是,为什么?

我在默认 bridge 网络上用 --net-alias--name 启动了一个容器:

docker run --rm --name=wa -dti -p 80:80 --net-alias=webapp docker/getting-started

现在我尝试从另一个容器内部通过两个容器都属于的默认 bridge 网络连接到它:

docker run --rm curlimages/curl https://webapp
curl: (6) Could not resolve host: webapp

docker run --rm curlimages/curl https://wa
curl: (6) Could not resolve host: wa

运气不好。但是通过 IP 地址连接时它工作得很好。

I wanted to do the same without creating my own network, using the default bridge network. Is it possible? If not, why?

不幸的是,无法从 docker 文档中引用:https://docs.docker.com/network/bridge/#differences-between-user-defined-bridges-and-the-default-bridge

User-defined 网桥在容器之间提供自动 DNS 解析。

默认桥接网络上的容器只能通过 IP 地址相互访问,除非你使用 --link 选项,这被认为是遗留的。在 user-defined 桥接网络上,容器可以通过名称或别名相互解析

也来自:https://docs.docker.com/config/containers/container-networking/#dns-services

DNS 服务

默认情况下,容器会继承主机的 DNS 设置,如 /etc/resolv.conf 配置文件中所定义。使用默认桥接网络的容器会获得此文件的副本,而使用自定义网络的容器会使用Docker的嵌入式 DNS 服务器