Docker可以在运行容器时自动将IP地址添加到主机

我在hetzner.de上有一个服务器,有大约16个公共IPv4地址。

现在我正在运行这样的容器:

sudo docker run -d --name test6 -it -p 5.1.2.3:80:80 sunebeck/apache-php 

这将最初产生这个错误:

 Error starting userland proxy: listen tcp 5.1.2.3:80: bind: cannot assign requested address. 

通过手动添加主机上的IP地址来修复这个问题:

 ip addr add 5.1.2.3 dev eth0 

之后,它按照预期工作,服务在5.1.2.3中作为端口80公开。 不过手动pipe理这个有点麻烦。

Docker能否根据需要自动添加/删除主机的IP地址?

Docker本身不能这样做。 除了一些例外(例如Docker在启动容器时创build的iptables规则),容器不能修改主机的networking环境。

解决这个问题最简单的方法可能就是安排在主机启动时将所有地址分配给接口,比如Fedora / CentOS / RHEL上的/etc/sysconfig/network-scripts/ifcfg-<interface> ,或者/etc/network/interfaces在Debian / Ubuntu上。

这样,在Docker开始运行之前,这些地址将在接口上可用,并且您的端口绑定将毫无问题地工作。