Docker 埠對映問題解決

2021-09-08 17:35:05 字數 2689 閱讀 9299

在操作docker容器時發現了其乙個埠對映的bug,具體表現為:開啟容器時做了埠對映80:8080,即宿主機的80埠對映到容器內部的8080jboss埠。一開始測試也沒有什麼問題,都可以聯通,但經過幾次重啟之後,突然發現無法訪問到jboss了。**及容器內部環境沒有發生過變化,只能從宿主機外部環境考慮了。

首先,列出nat表所有鏈的所有規則,只顯示ip位址和埠號,如下

[root@ip-192-168-31-161 ~]# iptables -t nat -nl

chain prerouting (policy accept)

target prot opt source destination

docker all -- 0.0.0.0/0

0.0.0.0/0 addrtype match dst-type local

chain input (policy accept)

target prot opt source destination

chain output (policy accept)

target prot opt source destination

docker all -- 0.0.0.0/0 !127.0.0.0/8 addrtype match dst-type local

chain postrouting (policy accept)

target prot opt source destination

masquerade all -- 172.17.0.0/16

0.0.0.0/0

masquerade tcp -- 172.17.0.1

172.17.0.1 tcp dpt:3306

masquerade tcp -- 172.17.0.5

172.17.0.5 tcp dpt:5666

masquerade tcp -- 172.17.0.5

172.17.0.5 tcp dpt:8180

masquerade tcp -- 172.17.0.5

172.17.0.5 tcp dpt:9537

masquerade tcp -- 172.17.0.5

172.17.0.5 tcp dpt:222

masquerade tcp -- 172.17.0.8

172.17.0.8 tcp dpt:6379

masquerade tcp -- 172.17.0.9

172.17.0.9 tcp dpt:8080

chain docker (

2references)

target prot opt source destination

dnat tcp -- 0.0.0.0/0

0.0.0.0/0 tcp dpt:3306 to:172.17.0.1:3306

dnat tcp -- 0.0.0.0/0

0.0.0.0/0

tcp dpt:80 to:172.17.0.2:8080

dnat tcp -- 0.0.0.0/0

0.0.0.0/0 tcp dpt:5667 to:172.17.0.5:5666

dnat tcp -- 0.0.0.0/0

0.0.0.0/0 tcp dpt:8180 to:172.17.0.5:8180

dnat tcp -- 0.0.0.0/0

0.0.0.0/0 tcp dpt:9537 to:172.17.0.5:9537

dnat tcp -- 0.0.0.0/0

0.0.0.0/0 tcp dpt:226 to:172.17.0.5:222

dnat tcp -- 0.0.0.0/0

0.0.0.0/0 tcp dpt:6379 to:172.17.0.8:6379

dnat tcp -- 0.0.0.0/0

0.0.0.0/0

tcp dpt:80 to:172.17.0.9:8080

在結果在我們可以清晰的看到宿主機的80埠對映給了兩個172的內部容器ip——172.17.0.2、172.17.0.9,新啟動的容器ip為09,02是其重啟前的ip。故做如下推測:docker在重啟容器之後,重新做埠對映的時候出了問題,沒有將之前的對映規則刪除,導致後續容器無法進行正確的埠對映。解決辦法:

[root@ip-192-168-31-161 ~]# iptables -t nat -d docker 2

解釋:刪除 chain docker 中的第二條規則

外網對映nginx埠丟失問題解決

nginx監聽8082埠,2個tomcat分別為8180和8280,外網對映埠為13410。實際的訪問位址有2個,內網是外網是 節點1內網直接訪問位址為節點2內網直接訪問位址為 正常直接訪問位址1,會被redirect一次,位址為 8180 jwell km client home login。當預...

docker 追加docker容器埠對映的方法

docker run可以指定埠對映,但是容器一旦生成,就沒有乙個命令可以直接修改。通常間接的辦法是,儲存映象,再建立乙個新的容器,在建立時指定新的埠對映。但這樣太麻煩了。現在有新方案來解決掉 操作步驟 1 檢視容器 docker ps a2 停止容器 docker stop f5033 停止dock...

Docker更改容器埠對映

一般情況下是不可以改變容器的埠對映的,只有通過run命令指定。如果想要不改變容器內容和配置的情況下更改埠對映只有先停止,然後將容器打包成映象,然後在執行新的映象的時候指定新的埠對映。先停止容器 docker stop containera 將容器commit成為乙個映象 docker commit ...