設定 Docker 守護程式的遠端存取
預設情況下,Docker daemon 會透過 Unix socket 接聽連線,以接受來自本機用戶端的請求。您可以透過將 Docker 配置為同時接聽 IP 位址和連接埠,以及 Unix socket,來讓 Docker 接受來自遠端用戶端的請求。
警告將 Docker 配置為接受來自遠端用戶端的連線可能會使您的主機面臨未經授權存取及其他攻擊的風險。
理解開放 Docker 連線至網路的安全影響至關重要。如果不採取措施保護連線,遠端非 root 使用者可能會獲得主機的 root 存取權限。
不建議在沒有 TLS 的情況下進行遠端存取,未來的版本將要求明確啟用。有關如何使用 TLS 憑證來保護此連線的更多資訊,請參閱保護 Docker daemon socket。
啟用遠端存取
您可以針對使用 systemd 的 Linux 發行版,透過 docker.service systemd 單元檔案啟用對 daemon 的遠端存取。如果您的發行版不使用 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 socket 和 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。
兩種常見的防火牆守護程式為:
- Uncomplicated Firewall (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>請確保介面名稱和鏈名稱正確無誤。
補充資訊
有關 daemon 遠端存取配置選項的詳細資訊,請參閱 dockerd CLI 參考。