設定 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 單元檔案設定遠端存取

  1. 使用命令 sudo systemctl edit docker.service 在文字編輯器中開啟 docker.service 的覆寫檔案。

  2. 新增或修改以下幾行,替換您自己的值。

    [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
  3. 儲存檔案。

  4. 重新載入 systemctl 設定。

    $ sudo systemctl daemon-reload
    
  5. 重新啟動 Docker。

    $ sudo systemctl restart docker.service
    
  6. 驗證變更是否已完成。

    $ sudo netstat -lntp | grep dockerd
    tcp        0      0 127.0.0.1:2375          0.0.0.0:*               LISTEN      3758/dockerd
    

使用 daemon.json 設定遠端存取

  1. /etc/docker/daemon.json 中的 hosts 陣列設定為連線到 Unix Socket 和 IP 位址,如下所示

    {
      "hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:2375"]
    }
  2. 重新啟動 Docker。

  3. 驗證變更是否已完成。

    $ 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,請在您的設定中設定 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 參考文件