使用 Moby 启动 dockerd 守护进程时如何配置 TLS 与监听端点并验证可用性
【免费下载链接】mobyThe Moby Project - a collaborative project for the container ecosystem to assemble container-based systems项目地址: https://gitcode.com/GitHub_Trending/mo/moby
在基于 Moby 的容器环境中部署 dockerd 守护进程时,常见的需求是让守护进程监听指定的网络端点,并对客户端启用 TLS 加密与证书校验。本文基于仓库中的 dockerd 手册页 说明如何用dockerd的命令行选项完成监听端点与 TLS 配置,并在启动前验证配置是否可用。dockerd用于启动 Docker 守护进程(负责管理镜像、容器等),它是一个常驻服务,所有守护进程选项都应写在dockerd关键字之后,即dockerd [OPTIONS]的形式。
配置监听端点:-H / --host
-H(--host)指定守护进程模式下要绑定的 socket,可以指定一个或多个,支持以下协议形式:
tcp://host:port—— 通过 TCP 端口监听;unix:///path/to/socket—— 使用 Unix socket 文件;fd://*或fd://socketfd—— 使用已有的文件描述符(例如由 systemd socket 激活传入)。
不指定时默认绑定unix:///var/run/docker.sock。
如果让 Unix socket 被特定组访问,可配合-G(--group)选项:它指定运行守护进程时分配给-H所定义 Unix socket 的组,默认是docker,传空字符串''可禁用设置组。
一个同时监听 Unix socket 与 TCP 端点的启动示例:
sudo dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376上面这条命令会让守护进程在本地 socket 和 TCP 2376 端口上同时接受连接。
配置 TLS:--tls、--tlsverify 与证书选项
与 TLS 相关的选项及其默认值如下(均来自 dockerd 手册页):
| 选项 | 默认值 | 作用 |
|---|---|---|
--tls | false | 启用 TLS;由--tlsverify隐含启用 |
--tlsverify | false | 使用 TLS 并校验远端(守护进程侧即校验客户端) |
--tlscacert | ~/.docker/ca.pem | 只信任由该 CA 签发的证书 |
--tlscert | ~/.docker/cert.pem | 守护进程 TLS 证书文件路径 |
--tlskey | ~/.docker/key.pem | 守护进程 TLS 密钥文件路径 |
启用 TLS 时,需要把证书文件放到默认路径(~/.docker/下的ca.pem、cert.pem、key.pem),或用--tlscacert、--tlscert、--tlskey显式指定路径。一个开启 TLS 并校验客户端证书的启动示例:
sudo dockerd -H tcp://0.0.0.0:2376 \ --tlsverify \ --tlscacert=/etc/docker/ca.pem \ --tlscert=/etc/docker/cert.pem \ --tlskey=/etc/docker/key.pem要点:
- 使用
--tlsverify时会自动隐含启用--tls,无需重复指定; --tls只开启 TLS 而不校验对端,--tlsverify才会在守护进程侧校验客户端证书。
如果不想把选项都写在命令行上,可以用--config-file指定配置文件路径,默认是/etc/docker/daemon.json,守护进程会从该 JSON 文件加载配置。
验证配置与确认可用性
手册页给出了两个可以直接使用的手段:
dockerd --help:确认当前构建支持哪些守护进程选项。手册页原文建议用dockerd --help查看选项,配置前先确认目标选项(如--tlsverify、--config-file)在所用版本中存在。--validate:校验守护进程配置后直接退出,不实际启动服务。可以在启动前对配置做一次性检查:
sudo dockerd -H tcp://0.0.0.0:2376 --tlsverify --validate配置无效时守护进程会在校验阶段报错退出;校验通过则退出,之后再执行不带--validate的启动命令让守护进程常驻运行。
另外,systemd 场景下可以查看仓库中提供的 docker.service 作为参考:其ExecStart使用dockerd -H fd:// --containerd=/run/containerd/containerd.sock,即通过fd://让 systemd 的 socket 单元把已监听的套接字传给守护进程,避免 dockerd 自行绑定端口。
限制与注意事项
--tls、--tlsverify默认均为false,即守护进程默认不以 TLS 方式监听 TCP 端点;对需要暴露的tcp://端点,应显式启用 TLS 相关选项。--insecure-registry是用于本地 registry 调试的不安全选项,手册页明确警告它只应用于测试目的;不要用它替代 TLS 来解决证书信任问题,应改为把对应 CA 加入系统信任列表。- 守护进程选项在
dockerd关键字之后指定;对证书文件的读取发生在守护进程启动阶段,证书文件缺失或不可读时无法建立 TLS 监听,可先用--validate检查配置。
完成配置校验并成功启动后,可以用-H指定的 socket 或 TCP 端点访问守护进程的 Engine API,确认守护进程已在预期端点上提供服务。
【免费下载链接】mobyThe Moby Project - a collaborative project for the container ecosystem to assemble container-based systems项目地址: https://gitcode.com/GitHub_Trending/mo/moby
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考