
kekru/docker-remote-api-tls本镜像通过容器化方式提供带TLS客户端认证的Docker Remote API访问能力,客户端必须通过TLS证书进行身份验证。作为直接在Docker守护进程上配置TLS的替代方案,本镜像简化了安全暴露Docker Remote API的流程,适用于需要安全远程管理Docker主机的场景。
生成证书文件
需准备CA根证书、服务器证书及私钥,可通过以下方式生成:
整理证书文件
将以下文件放入本地目录(后续挂载到容器):
ca-cert.pem # CA根证书 server-cert.pem # 服务器证书 server-key.pem # 服务器私钥
客户端需使用
ca-cert.pem、cert.pem(客户端证书)和key.pem(客户端私钥)进行认证
创建docker-compose.yml文件:
yamlversion: "3.4" services: remote-api: image: kekru/docker-remote-api-tls:v0.4.0 ports: - 2376:443 # 标准Docker TLS端口映射 volumes: - <本地证书目录>:/data/certs:ro # 只读挂载证书目录 - /var/run/docker.sock:/var/run/docker.sock:ro # 只读挂载Docker套接字
bash# 使用Docker Compose启动 docker-compose up -d # 或使用Docker Swarm部署 docker stack deploy --compose-file=docker-compose.yml remoteapi
服务启动后,Docker Remote API将通过https://<主机IP>:2376暴露,客户端需使用cert.pem和key.pem进行认证。
无需提前生成证书,镜像将自动创建CA根证书、服务器证书、客户端证书及私钥。需准备:
创建docker-compose.yml文件:
yamlversion: "3.4" services: remote-api: image: kekru/docker-remote-api-tls:v0.4.0 ports: - 2376:443 environment: - CREATE_CERTS_WITH_PW=supersecret # 证书加密密码(必填) - CERT_HOSTNAME=remote-api.example.com # API访问主机名(必填) # 可选:自定义证书有效期 # - CERT_EXPIRATION_DAYS=365 # 服务器/客户端证书有效期(默认365天) # - CA_EXPIRATION_DAYS=900 # CA根证书有效期(默认900天) volumes: - <本地证书目录>:/data/certs # 读写挂载,用于存储生成的证书 - /var/run/docker.sock:/var/run/docker.sock:ro
bash# 使用Docker Compose启动 docker-compose up -d # 或使用Docker Swarm部署 docker stack deploy --compose-file=docker-compose.yml remoteapi
生成的证书将存储在<本地证书目录>:
ca-cert.pem、server-cert.pem、server-key.pem<本地证书目录>/client/ca.pem、cert.pem、key.pem| 环境变量名 | 描述 | 默认值 | 优先级 |
|---|---|---|---|
CREATE_CERTS_WITH_PW | 证书加密密码(自动生成证书时必填) | 无 | 低于CERTS_PASSWORD_FILE |
CERTS_PASSWORD_FILE | 存储证书密码的Docker Secret文件路径(绝对路径) | 无 | 高于CREATE_CERTS_WITH_PW |
CERT_HOSTNAME | 服务器证书中的主机名(自动生成证书时必填,支持逗号分隔多个主机/IP) | 无 | - |
CERT_EXPIRATION_DAYS | 服务器和客户端证书的有效期(天) | 365 | - |
CA_EXPIRATION_DAYS | CA根证书的有效期(天) | 900 | - |
ca-cert.pem、cert.pem、key.pem)<本地证书目录>/client/通过环境变量指定证书路径和API地址:
bashexport DOCKER_HOST=tcp://remote-api.example.com:2376 export DOCKER_TLS_VERIFY=1 export DOCKER_CERT_PATH=<客户端证书目录> # 包含ca.pem、cert.pem、key.pem的目录
测试连接:
bashdocker ps # 应返回远程主机上的容器列表
dockerRemote脚本项目提供dockerRemote脚本简化客户端访问:
wget [***]DOCKER_HOST和DOCKER_CERT_PATH为实际值./dockerRemote ps克隆仓库:
bashgit clone [***] cd docker-remote-api-tls
启动服务(自动生成证书模式):
bash# 修改docker-compose.yml中的CERT_HOSTNAME为本地IP或主机名 docker-compose up -d
测试API访问:
bash# 使用项目提供的dockerRemote脚本 ./dockerRemote ps
CERT_EXPIRATION_DAYS和CA_EXPIRATION_DAYS)CERTS_PASSWORD_FILE)manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务