docker容器埠對映解析

2022-03-27 08:33:00 字數 2706 閱讀 1156

問題

docker固定容器ip前提是設定net為none,此情景下所有的網路配置都失效,包括-p埠對映。

目的

使用其他的方法做埠對映,繞過net為none

方法

docker的埠對映並不是在docker技術中實現的,而是通過宿主機的iptables來實現;通過控制網橋來做埠對映,類似路由器中設定路由埠對映。

先檢查配置埠對映,iptable設定了什麼

執行:docker run -d -p 9000:9000 redis_cluster 9000

root@ubuntu:~# iptables -t nat -l -n

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:9000

chain docker (2 references)

target prot opt source destination

dnat tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:9000 to:172.17.0.1:9000

那麼我們就可以自己寫dnat的命令,讓外部的埠進行轉換… docker建立了乙個名為dokcer的自定義的鏈條chain … … iptables自定義鏈條的好處就是可以讓防火牆的策略更加的層次化… …

檢視命令

root@ubuntu:~# iptables -s

-p input accept

-p forward accept

-p output accept

-n docker

-a forward -o docker0 -j docker

-a forward -o docker0 -m conntrack --ctstate related,established -j accept

-a forward -i docker0 ! -o docker0 -j accept

-a forward -i docker0 -o docker0 -j accept

-a docker -d 172.17.0.1/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 9000 -j accept

root@ubuntu:~# iptables -t nat -s

-p prerouting accept

-p input accept

-p output accept

-p postrouting accept

-n docker

-a prerouting -m addrtype --dst-type local -j docker

-a prerouting -p tcp -m tcp --dport 80 -j dnat --to-destination 172.17.0.1:80

-a output ! -d 127.0.0.0/8 -m addrtype --dst-type local -j docker

-a postrouting -s 172.17.0.0/16 ! -o docker0 -j masquerade

-a postrouting -s 172.17.0.1/32 -d 172.17.0.1/32 -p tcp -m tcp --dport 9000 -j masquerade

-a docker -p tcp -m tcp --dport 9000 -j dnat --to-destination 172.17.0.1:9000

執行dnat命令iptables -t nat -a prerouting -p tcp –dport 80 -j dnat –to 172.17.0.1:80將宿主的80埠對映到docker容器的172.17.0.1的80埠

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

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

Docker更改容器埠對映

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

Docker容器修改埠對映

對於已經建立的docker容器,需要新增容器對主機的埠對映,主要分為三種 1.使用docker ps a命令找到要修改容器的container id 2.執行以下命令,進入該容器目錄 docker inspect container id grep id cd var lib docker cont...