為 Docker 守護程序配置遠端訪問
預設情況下,Docker 守護程序在 Unix 套接字上偵聽連線,以接受來自本地客戶端的請求。您可以將 Docker 配置為透過偵聽 IP 地址和埠以及 Unix 套接字來接受來自遠端客戶端的請求。
警告將 Docker 配置為接受來自遠端客戶端的連線可能會使您面臨主機未經授權的訪問和其他攻擊的風險。
至關重要的是,您需要了解向網路開放 Docker 的安全隱患。如果未採取措施保護連線,遠端非 root 使用者可能會獲得主機的 root 訪問許可權。
不推薦在沒有 TLS 的情況下進行遠端訪問,並且在將來的版本中將需要明確選擇加入。有關如何使用 TLS 證書保護此連線的更多資訊,請參閱保護 Docker 守護程序套接字。
啟用遠端訪問
對於使用 systemd 的 Linux 發行版,您可以使用 docker.service
systemd 單元檔案來啟用對守護程序的遠端訪問。或者,如果您的發行版不使用 systemd,您可以使用 daemon.json
檔案。
同時使用 systemd 單元檔案和 daemon.json
檔案來配置 Docker 偵聽連線會導致衝突,從而阻止 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 埠上的傳入連線。如果您使用 TLS 加密傳輸,預設埠是 2376
,否則是 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 參考。