![docker容器訪問控制[docker中文手冊]](https://img.uj5u.com/2020/10/27/164377271433221.jpg)
iptables,容器,0.0,Docker,訪問
容器訪問控制
容器的訪問控制,主要通過 Linux 上的 iptables 防火墻來進行管理和實作,iptables 是 Linux 上默認的防火墻軟體,在大部分發行版中都自帶,
容器訪問外部網路
容器要想訪問外部網路,需要本地系統的轉發支持,在Linux 系統中,檢查轉發是否打開,
1
|
$sysctl net.ipv4.ip_forward
|
如果為 0,說明沒有開啟轉發,則需要手動打開,
1
|
$sysctl -w net.ipv4.ip_forward=1
|
如果在啟動 Docker 服務的時候設定 --ip-forward=true, Docker 就會自動設定系統的 ip_forward 引數為 1,
容器之間訪問
容器之間相互訪問,需要兩方面的支持,
- 容器的網路拓撲是否已經互聯,默認情況下,所有容器都會被連接到
docker0網橋上, - 本地系統的防火墻軟體 –
iptables是否允許通過,
訪問所有埠
當啟動 Docker 服務(即 dockerd)的時候,默認會添加一條轉發策略到本地主機 iptables 的 FORWARD 鏈上,策略為通過(ACCEPT)還是禁止(DROP)取決于配置--icc=true(預設值)還是 --icc=false,當然,如果手動指定 --iptables=false 則不會添加 iptables 規則,
可見,默認情況下,不同容器之間是允許網路互通的,如果為了安全考慮,可以在 /etc/docker/daemon.json 檔案中配置 {"icc": false} 來禁止它(Ubuntu 14.04 等使用 upstart 的系統在檔案 /etc/default/docker 中配置 DOCKER_OPTS=--icc=false),
訪問指定埠
在通過 -icc=false 關閉網路訪問后,還可以通過 --link=CONTAINER_NAME:ALIAS 選項來訪問容器的開放埠,
例如,在啟動 Docker 服務時,可以同時使用 icc=false --iptables=true 引數來關閉允許相互的網路訪問,并讓 Docker 可以修改系統中的 iptables 規則,
此時,系統中的 iptables 規則可能是類似
1
|
$ sudo iptables -nL
|
之后,啟動容器(docker run)時使用 --link=CONTAINER_NAME:ALIAS 選項,Docker 會在 iptable 中為 兩個容器分別添加一條 ACCEPT 規則,允許相互訪問開放的埠(取決于 Dockerfile 中的 EXPOSE 指令),
當添加了 --link=CONTAINER_NAME:ALIAS 選項后,添加了 iptables 規則,
1
|
$ sudo iptables -nL
|
注意:--link=CONTAINER_NAME:ALIAS 中的 CONTAINER_NAME 目前必須是 Docker 分配的名字,或使用 --name 引數指定的名字,主機名則不會被識別,
最后注意:光理論是不夠的,在此順便送大家十套2020最新JAVA架構專案實戰教程及大廠面試題庫,進我扣裙 :七吧傘吧零而衣零傘 (數字的諧音)轉換下可以找到了,還可以跟老架構師交流
本文的文字及圖片來源于網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/193599.html
標籤:Java
上一篇:多執行緒-死鎖問題
