配置 Docker 守護程序的遠端訪問
預設情況下,Docker 守護程序偵聽 Unix 套接字上的連線,以接受來自本地客戶端的請求。你可以透過配置 Docker 偵聽 IP 地址和埠以及 Unix 套接字,將其配置為接受來自遠端客戶端的請求。
警告
將 Docker 配置為接受來自遠端客戶端的連線可能會使你容易受到對主機和其它攻擊的未經授權的訪問。
至關重要的是,你必須瞭解將 Docker 開啟到網路的安全隱患。如果沒有采取措施來保護連線,遠端非 root 使用者可能獲得主機上的 root 訪問許可權。
不建議使用無 TLS 的遠端訪問,並且在將來的版本中將需要明確選擇加入。有關如何使用 TLS 證書來保護此連線的更多資訊,請參閱 保護 Docker 守護程序套接字。
啟用遠端訪問
你可以使用 docker.service
systemd 單位檔案(適用於使用 systemd 的 Linux 發行版)來啟用對守護程序的遠端訪問。或者,如果你的發行版不使用 systemd,則可以使用 daemon.json
檔案。
將 Docker 配置為同時使用 systemd 單位檔案和 daemon.json
檔案偵聽連線會導致衝突,從而阻止 Docker 啟動。
使用 systemd 單位檔案配置遠端訪問
使用
sudo systemctl edit docker.service
命令在文字編輯器中開啟docker.service
的覆蓋檔案。新增或修改以下行,替換你自己的值。
[Service] ExecStart= ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
儲存檔案。
重新載入
systemctl
配置。$ sudo systemctl daemon-reload
重啟 Docker。
$ sudo systemctl restart docker.service
驗證更改是否已完成。
$ sudo netstat -lntp | grep dockerd tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
使用 daemon.json
配置遠端訪問
在
/etc/docker/daemon.json
中設定hosts
陣列,以連線到 Unix 套接字和 IP 地址,如下所示{ "hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:2375"] }
重啟 Docker。
驗證更改是否已完成。
$ sudo netstat -lntp | grep dockerd tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
允許透過防火牆訪問遠端 API
如果你在與執行 Docker 相同的主機上執行防火牆,並且想要從另一個遠端主機訪問 Docker 遠端 API,則必須配置防火牆以允許在 Docker 埠上的傳入連線。預設埠為 2376
(如果你使用 TLS 加密傳輸)或 2375
(否則)。
兩個常見的防火牆守護程序是
- 非複雜防火牆 (ufw),常用於 Ubuntu 系統。
- firewalld,常用於基於 RPM 的系統。
請參閱你的作業系統和防火牆的文件。以下資訊可能有助於你入門。此說明中使用的設定是寬鬆的,你可能需要使用不同的配置來更嚴格地鎖定你的系統。
對於 ufw,請在你的配置中設定
DEFAULT_FORWARD_POLICY="ACCEPT"
。對於 firewalld,請在你的策略中新增類似於以下規則。一個用於傳入請求,另一個用於傳出請求。
<direct> [ <rule ipv="ipv6" table="filter" chain="FORWARD_direct" priority="0"> -i zt0 -j ACCEPT </rule> ] [ <rule ipv="ipv6" table="filter" chain="FORWARD_direct" priority="0"> -o zt0 -j ACCEPT </rule> ] </direct>
確保介面名稱和鏈名稱正確。
其他資訊
有關對守護程序進行遠端訪問的配置選項的更詳細的資訊,請參閱 dockerd CLI 參考。