当前位置: 首页 > 面试题库 >

Docker Networking:在网桥网络中自动发现主机名

司马高明
2023-03-14
问题内容

我正在尝试获得以下相当基本的(或我认为)联网设置,以使用Docker 1.9进行工作:

  • 我有多个运行服务的postgres容器,例如一个容器和一个python容器(可能有两个以上)。
  • 这些容器通过bridge网络相互连接。
  • 我希望它们可以使用唯一的主机名来寻址(即Python容器应该能够对ping postgresPostgreSQL容器执行ping操作)。

遵循本教程(https://docs.docker.com/engine/userguide/networking/dockernetworks/),我可以使用以下命令序列来实现此目的:

#create the containers
docker run -itd --name container1 busybox
docker run -itd --name container2 busybox
#create the network
docker network create test
docker network connect test container1
docker network connect test container2

这工作得很好,并且Docker正确设置了条目etc/hosts以指向正确的IP地址。但是,我也希望能够同时运行该安装程序的多个实例(即容器+网络)。这是行不通的,因为/etc/hosts文件中每个容器的条目都等于其
名称 ,该 名称 必须唯一。指定hostname参数不能解决此问题,因为它仅更改容器的 本地 主机名(即它看到的自身)。

我会对在不依靠在容器上运行DNS服务的情况下执行此操作的方式非常感兴趣。这似乎是一个简单的问题,但不幸的是,我无法找到任何配置选项来更改/etc/hosts文件中容器的名称。

顺便说一句,我希望在网络和容器设置的每个实例中主机名都相同,这样我就无需将主机名动态传递到容器中(例如,告诉Python容器Postgres容器的地址)

编辑
:我对Docker的问题跟踪器进行了一些研究,并且在管道中似乎对此有一个功能:https
:
//github.com/docker/libnetwork/issues/737


问题答案:

docker 1.10和PR 19242可以帮助:

docker create --net-alias=[]: Add network-scoped alias for the container

docker 1.10新增了一个
网络范围别名

链接提供了位于容器内的私有名称解析,而网络范围的别名为特定网络范围内的任何其他容器提供了一种由备用名称发现容器的方式。
与服务的使用者定义的链接别名不同,网络范围的别名是由向网络提供服务的容器定义的。

继续上面的示例,isolated_nw使用网络别名在其中创建另一个容器。

$ docker run --net=isolated_nw -itd --name=container6 --net-alias app busybox
8ebe6767c1e0361f27433090060b33200aac054a68476c3be87ef4005eb1df17

现在,让我们使用其他网络范围的别名连接container6local_alias网络。

$ docker network connect --alias scoped-app local_alias container6

container6在本示例中,现在别名为appnetwork isolated_nwscoped- appnetwork中的别名local_alias



 类似资料:
  • 本文向大家介绍Docker主机网络与网桥网络,包括了Docker主机网络与网桥网络的使用技巧和注意事项,需要的朋友参考一下 可用于Docker网络的单主机网络有两种类型:“主机”和“桥”网络。单主机网络意味着它们的影响对于每个单独的主机都是局部的。 在主机网络的情况下,特定的Docker容器可以直接使用主机的网络来发送和接收数据包。对于网桥网络,它需要端口映射才能进行通信。 为了更好地理解它们,让

  • UNIX系统内部用一个主机网络地址数据库来记住主机名和IP地址直接的映射,这一数据库由文件/etc/hosts/或DNS提供。 关键头文件 netdb.h 关键结构体 hostent 用于报错一台主机的完整地址信息 struct hostent //host entry的缩写 { char *h_name; /* 主机的正式名字 */ char **h_aliase

  • 我有一个 docker 容器,我想给它 --network=host AND -。我需要连接到主机网络才能将主机数据狗服务器 (UDP) 和 网络用于其数据库。 尝试添加这两个网络会导致。 知道正确的处理方法吗?

  • 有没有办法解决这个问题? 操作系统:Debian 8 Docker版本:1.9.0,构建76d6bc9 ifconfig输出:

  • 自定义网桥 除了默认的 docker0 网桥,用户也可以指定网桥来连接各个容器。 在启动 Docker 服务的时候,使用 -b BRIDGE或--bridge=BRIDGE 来指定使用的网桥。 如果服务已经运行,那需要先停止服务,并删除旧的网桥。 $ sudo systemctl stop docker$ sudo ip link set dev docker0 down$ sudo brctl

  • 1.1.1. 目录 1.1.2. 设备自动发现 1.1.1. 目录 设备自动发现 交互 消息示例 说明 1.1.2. 设备自动发现 SSDP 是一个简单的基于 UDP 的网络发现协议, 广泛用于 UPNP, IoT 行业 交互 HomeBase 上线后, 会自动广播发送 SSDP SEARCH 并设置 ST 头为 homebase device 设备收到 SSDP Search 广播, 马上向 S