[Docker] 設定 container 裡的固定 IP address
最近用別人做好的 docker image 跑 moinmoin wiki,
不過以前的 wiki server 是有個固定 IP address 的,
現在這樣跑起來,用的是我 docker host 的 IP address,有點不便…
在 stackoverflow: Giving a docker container a routable ip address 這篇,
有網友給了解答,試了一下也的確可以,
雖然不知道是不是正規作法,不過就先用這個方法頂一下吧~~
以下的範例假設 Docker host 有一張 em1 網卡 (目前的 IP 是 10.1.117.1),
moinmoin container 裡的固定 IP 希望設定成 10.1.116.2~
1. 先給 Docker host 一個固定 IP
先測試一下 10.1.116.2 在不在,目前是不在的:
testuser@localhost ~ $ ping 10.1.116.2
PING 10.1.116.2 (10.1.116.2) 56(84) bytes of data. ^C --- 10.1.116.2 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms
檢查一下目前的 IP,確認是 10.1.117.1:
testuser@localhost ~ $ ip a
2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 99:88:77:66:55:44 brd ff:ff:ff:ff:ff:ff
inet 10.1.117.1/22 brd 10.1.119.255 scope global dynamic em1
valid_lft 832305sec preferred_lft 832305sec
用 ip addr 指令,在 em1 介面上設定一個新的固定 IP 10.1.116.2,
這邊我把 netmask 設定成 /32 (也就是 255.255.255.255),
好跟原本的 10.1.117.1 的網段徹底切開來:
sudo ip addr add 10.1.116.2/32 dev em1
設定完之後,ping 一下 10.1.116.2,果然通了:
testuser@localhost ~ $ ping 10.1.116.2
PING 10.1.116.2 (10.1.116.2) 56(84) bytes of data. 64 bytes from 10.1.116.2: icmp_seq=1 ttl=64 time=0.024 ms 64 bytes from 10.1.116.2: icmp_seq=2 ttl=64 time=0.036 ms ^C --- 10.1.116.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.024/0.030/0.036/0.006 ms
再用 ip addr 指令看一下目前的狀況,10.1.116.2/32 這個網段確實被加上了:
testuser@localhost ~ $ ip a 2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 99:88:77:66:55:44 brd ff:ff:ff:ff:ff:ff inet 10.1.117.1/22 brd 10.1.119.255 scope global dynamic em1 valid_lft 832305sec preferred_lft 832305sec inet 10.1.116.2/32 scope global em1 valid_lft forever preferred_lft forever
2. 將連到新 IP 的連線導到 container 內部
用下面的指令將 moinmoin 的 container 叫起來,
平常是寫 -p 80:80 代表將連到 docker host 的 port 80 的連線轉至 container 的 port 80,
下面多寫了新建出來的 IP,就是只有連到這 IP 的 port 80 時才會導到 container 去:
docker run --rm -it -p 10.1.116.2:80:80 -v /moin:/usr/local/share/moin:Z --name=wiki eternnoir/moinmoin
這樣設定完成之後,果然可以用 http://10.1.116.2 的方式來連 moinmoin wiki 囉~
2 thoughts on “[Docker] 設定 container 裡的固定 IP address”
謝謝版主的文章,我是初學者,加了 –rm 之後把我自己建的容器刪除了… 覺得不建議加這個參數
-rm 是會在結束後自動刪掉 container,
所以就看自己應用的需求囉~