为 Docker 守护程序配置远程访问

默认情况下,Docker 守护程序侦听 Unix 套接字上的连接以接受 来自本地客户端的请求。您可以将 Docker 配置为接受请求 通过将其配置为侦听 IP 地址和端口,从远程客户端 作为 Unix 套接字。

警告

配置 Docker 以接受来自远程客户端的连接可能会让您 容易受到对主机的未授权访问和其他攻击。

了解向网络开放 Docker 的安全影响至关重要。 如果不采取措施保护连接,远程非 root 用户可能会获得主机上的 root 访问权限。

不建议不使用 TLS 进行远程访问,在未来的发行版中需要明确选择加入。 有关如何使用 TLS 证书保护此连接的更多信息,请参阅保护 Docker 守护程序套接字

启用远程访问

您可以使用 systemd 的 Linux 发行版的 systemd 单元文件来启用对守护程序的远程访问。 或者,如果您的分配不使用 systemd,则可以使用该文件。docker.servicedaemon.json

配置 Docker 以使用 systemd 单元文件侦听连接 并且该文件会导致阻止 Docker 启动的冲突。daemon.json

使用 systemd 单元文件配置远程访问

  1. 使用命令打开覆盖文件 for 在文本编辑器中。sudo systemctl edit docker.servicedocker.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. 在 中设置数组以连接到 Unix 套接字和 IP 地址,如下所示:hosts/etc/docker/daemon.json

    {
      "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 Remote API,您必须配置防火墙 以允许 Docker 端口上的传入连接。默认端口为 if 您使用的是 TLS 加密传输或其他方式。23762375

两种常见的防火墙守护程序是:

请参阅适用于您的操作系统和防火墙的文档。以下信息 可能会帮助您入门。本说明中使用的设置包括 permissive,并且您可能希望使用不同的配置来锁定 系统宕机更多。

  • 对于 ufw,请在您的配置中设置。DEFAULT_FORWARD_POLICY="ACCEPT"

  • 对于 firewalld,请将类似于以下内容的规则添加到您的策略中。一个用于 incoming requests 和一个用于传出请求的请求。

    <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 参考