2016-10-23 47 views
0

我在hetzner.de上有一個服務器,大約有16個公有IPv4地址。運行容器後,Docker會自動爲主機添加IP地址

現在我正在運行的容器是這樣的:

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。然而,手動管理這件事有點麻煩。

Docker會根據需要自動添加/刪除主機的IP地址嗎?

回答

1

Docker本身不能這樣做。除了少數例外(例如Docker在啓動容器時創建的iptables規則),容器不能修改主機的網絡環境。

解決此問題的最簡單方法可能就是安排在主機啓動時將所有地址分配給接口,例如Fedora/CentOS/RHEL上的/etc/sysconfig/network-scripts/ifcfg-<interface>或Debian/Ubuntu上的/etc/network/interfaces

這樣,在Docker開始運行之前,這些地址將在接口上可用,並且您的端口綁定可以毫無問題地工作。

+0

我想這樣做,但我也不希望物理服務器聲稱IP地址,如果另一個主機可能是在給定時刻使用它的人。 – sune

+0

但我當然可以通過製作一個包裝腳本來解決它。或者可以使用一些現有的服務來'安排'更大的安裝。 – sune

+0

正確;我會建議使用像Kubernetes這樣的編排層可能會更好地管理這一點。我曾經寫過一個工具(稱爲[kiwi](https://github.com/larsks/kiwi)),它完全符合你的要求,但它從來沒有非常強大,並且不適用於現代版本的Kubernetes。 – larsks

相關問題