發表文章

目前顯示的是有「network」標籤的文章

如何取得docker container中的ip address與網路界面

How to discover the IP address and interface for a docker container 這篇主要講述如何取得docker container的IP位置與網路界面資訊。當你的docker container中並沒有安裝IP相關的工具程式,無法透過docker exec的方式執行ip相關的工具程式來取得IP位置與網路界面資訊,並且該網路界面的IP設定與docker DHCP預設配發的不一樣的時候,你可以這樣做。 Step 1 取得network namespace file # docker inspect abay-test -f "{{.NetworkSettings.SandboxKey}}" 假設我們要取得的docker container的名稱為abay-test,執行這行指令後會得到/var/run/docker/netns/6f6c87265050  Step 2.  建立network namespace連結 # ln -s /var/run/docker/netns/6f6c87265050 /var/run/netns/6f6c87265050 這個檔案會在下次重新開機的時候就會不見 Setp 3. 在指定namespace下執行ip a # ip netns exec 6f6c87265050 ip a 輸出的結果 abay@vm-01:~$ sudo ip netns exec 6f6c87265050 ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 87: eth0@if88: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP ...

如何動態新增執行中的docker container對外的port

圖片
How to expose port on a running container? 如果你已經建立了一個docker container,並且成功運行中,但需要臨時增加對外的port這時候又不想將container停下來的時候,可以直接修改docker host的網路設定達到此目的。 注意:以下提供的修改方法,並不會影響container本身的設定,當docker host或是docer 重新啟動後,設定值就會還原。 假設你開啟了一個Web server的container但卻忘記要開啟 HTTP port,這時候除了透過 docker commit方式還可以動態新增對外的port,可以參照下列的步驟。 這邊的實作是針對運行在Linux上的docker所建立出的container來示範。 Step 1: 取得目標container的IP位址 # docker inspect <your container name> (假設你的container的IP是172.18.0.3) Step 2: 設定iptables # iptables -t nat -A DOCKER -p tcp --dport 80 -j DNAT --to-destination 172.18.0.3:80 # iptables -t nat -A POSTROUTING -j MASQUERADE -p tcp --source 172.18.0.3 --destination 172.18.0.3 --dport 80 #iptables -A DOCKER -j ACCEPT -p tcp --destination 172.18.0.3 --dport 80 Step 3: 進行HTTP連線測試,觀察是否可以連到該container的Web服務。