配置 Docker 守护进程的远程访问

默认情况下,Docker 守护进程侦听 Unix 套接字上的连接以接受来自本地客户端的请求。通过将 Docker 配置为侦听 IP 地址和端口以及 Unix 套接字,可以允许 Docker 接受来自远程主机的请求。有关此配置选项的更多详细信息,请参阅 dockerd CLI 参考

警告

在配置 Docker 接受来自远程主机的连接之前,了解向网络开放 Docker 的安全影响至关重要。如果不采取措施保护连接,远程非 root 用户就有可能获得主机上的 root 访问权限。有关如何使用 TLS 证书来保护此连接的更多信息,请查看 保护 Docker 守护程序套接字

您可以将 Docker 配置为接受远程连接。docker.service对于使用 systemd 的 Linux 发行版,可以使用 systemd 单元文件来完成此操作。或者daemon.json,如果您的发行版不使用 systemd,您也可以使用该文件。

系统对比daemon.json

将 Docker 配置为同时使用 systemd 单元文件和该文件来侦听连接会daemon.json导致冲突,导致 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. 设置hosts/etc/docker/daemon.json连接到 Unix 套接字的数组和 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