設定 Docker Daemon 的遠端存取
預設情況下,Docker Daemon 會監聽 Unix Socket 上的連線,以接受來自本地用戶端的請求。您可以將 Docker 設定為監聽 IP 位址和埠以及 Unix Socket,以便接受來自遠端用戶端的請求。
警告
將 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
。
兩種常見的防火牆 Daemon 是
- 簡易防火牆 (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 參考文件。