[Docker] 設定 container 裡的固定 IP address

[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 囉~

 

(本頁面已被瀏覽過 5,021 次)

2 thoughts on “[Docker] 設定 container 裡的固定 IP address

  1. 謝謝版主的文章,我是初學者,加了 –rm 之後把我自己建的容器刪除了… 覺得不建議加這個參數

    1. -rm 是會在結束後自動刪掉 container,
      所以就看自己應用的需求囉~

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料