1

我使用 node.js 应用程序(取决于 apocas 的 dockerode API)创建 docker 容器,其中多个 docker 网络连接到每个容器。默认情况下,每个容器都会为每个网络接口获取一个随机 IP 地址。

示例: ip: 172.18.0.2的 dev-container并连接到接口eth4上的网络demo-net

当我这样做时,docker inspect dev-container我可以看到网络demo-net已连接到ip 地址为172.18.0.2的容器dev-container(如预期的那样)。

现在我执行dev-containerdocker exec -it dev-container /bin/bash使用ifconfig eth4 192.168.99.169 netmask 255.255.240.0.

结果:ifconfig显示新地址192.168.99.169连接到接口 eth4。但是当我docker inspect dev-container再次执行时,仍然有旧地址172.18.0.2与网络demo-net连接(不是预期的)。

有没有办法让 docker 更新内部网络设置,以便 docker inspect 显示更新的 ip 设置,或者有更好的方法来更改容器的 ip 地址?

(Docker 版本为 19.03.12)

4

1 回答 1

2

如果您尝试手动更改容器的网络配置,Docker 不会注意到。您可以docker rm将您的容器和docker run它再次带回一致的状态。

以此类推,您可以尝试登录您的家庭 WiFi 路由器。它可能会说您的笔记本电脑是 192.168.1.2,而您的打印机是 192.168.1.3。您当然可以运行ifconfig将笔记本电脑的 IP 地址更改为 192.168.1.3/24 或 10.20.30.40/16;但是,如果您这样做,您的路由器将不知道这是怎么回事,如果您尝试呼出(或者如果您设置了反向 NAT 规则以允许入站呼叫返回),IP 路由将无法正常工作,如果您尝试打印,您可能会遇到奇怪的网络冲突。

Docker 完全管理容器的网络接口。没有理由运行ifconfigip在容器中。容器私有 IP 地址实际上是一个实现细节,在许多常见情况下无法使用;我也会避免查找这个。您同样不需要手动设置它,但如果您这样做,“创建容器”Docker API(基本上由 dockerode 直接公开)允许您指定NetworkingConfig.

于 2020-08-06T09:58:24.623 回答