Docker配置带证书的远程访问监听

一、生成证书和密钥

1、准备证书目录和生成CA证书

创建证书目录

bash 复制代码
mkdir -p /etc/docker/tls
cd /etc/docker/tls

生成CA密钥和证书

bash 复制代码
openssl req -x509 -newkey rsa:4096 -keyout ca-key.pem \
-out ca-cert.pem -days 365 -nodes -subj "/CN=Docker CA"

2、为Docker守护进程(server)配置TLS证书

生成服务器密钥和证书签名请求(CSR)

bash 复制代码
openssl req -newkey rsa:4096 -keyout server-key.pem \
-out server-csr.pem -nodes -subj "/CN=192.168.XX.230"

创建一个配置文件

bash 复制代码
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
CN = 192.168.XX.230

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
IP.1 = 192.168.XX.230
IP.2 = 127.0.0.1
DNS.1 = localhost

使用CA证书对服务器CSR进行签名

bash 复制代码
openssl x509 -req -in server-csr.pem -CA ca-cert.pem \
-CAkey ca-key.pem -CAcreateserial -out server-cert.pem \
-days 365 -extensions v3_req -extfile openssl.cnf

2、为Docker命令(client)配置TLS证书

生成客户端密钥和证书签名请求(CSR)

bash 复制代码
openssl req -newkey rsa:4096 -keyout client-key.pem \
-out client-csr.pem -nodes -subj "/CN=client"

生成客户端密钥和证书签名请求(CSR)

bash 复制代码
openssl x509 -req -in client-csr.pem -CA ca-cert.pem \
-CAkey ca-key.pem -CAcreateserial \
-out client-cert.pem -days 365

二、配置Docker守护进程

编辑Docker守护进程的配置文件(通常是/etc/docker/daemon.json),添加以下内容

bash 复制代码
{
  "tlsverify": true,
  "tlscacert": "/etc/docker/tls/ca-cert.pem",
  "tlscert": "/etc/docker/tls/server-cert.pem",
  "tlskey": "/etc/docker/tls/server-key.pem",
  "hosts": ["tcp://0.0.0.0:2376"]
}

编辑Docker服务文件

#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

ExecStart=/usr/bin/dockerd

bash 复制代码
systemctl daemon-reload

重启Docker守护进程

bash 复制代码
sudo systemctl restart docker

三、配置Docker客户端

将生成的客户端证书和密钥放置在客户端机器上的一个目录中,例如~/.docker/tls:

bash 复制代码
mkdir -p ~/.docker/tls
cp client-cert.pem ~/.docker/tls/
cp client-key.pem ~/.docker/tls/
cp ca-cert.pem ~/.docker/tls/

在运行docker命令时,指定客户端证书和密钥:

bash 复制代码
docker --tlsverify \
  --tlscacert ~/.docker/tls/ca-cert.pem \
  --tlscert ~/.docker/tls/client-cert.pem \
  --tlskey ~/.docker/tls/client-key.pem \
  -H tcp://192.168.XX.230:2376 \
images

为了方便,可以设置环境变量以避免每次命令都指定证书路径:

export DOCKER_TLS_VERIFY=1

export DOCKER_CERT_PATH=~/.docker/tls

export DOCKER_HOST=tcp://192.168.XX.230:2376

环境变量场景,ca证书需要命名为ca.pem,否则找不到ca文件:Failed to initialize: unable to resolve docker endpoint: open /home/user1/.docker/tls/ca.pem: no such file or directory

好像也要指定,否则会报错:error during connect: Get "https://192.168.XX.230:2376/v1.45/containers/json?all=1": remote error: tls: certificate required

bash 复制代码
docker --tlscert ~/.docker/tls/client-cert.pem \
   --tlskey ~/.docker/tls/client-key.pem \
   ps -a
相关推荐
快乐的哈士奇15 小时前
LangFuse 自托管实战:选型理由、Docker 部署与常用配置全解析
运维·人工智能·docker·容器
weixin_4492900117 小时前
Docker + MySQL 在 Windows 11 上的本地安装部署文档
mysql·docker·容器
Ysn071917 小时前
中文乱码:在 Docker 容器中设置中文语言环境
运维·python·docker·容器
米高梅狮子17 小时前
01.CentOS-Stream-8-packstack安装OpenStack
linux·云原生·容器·kubernetes·centos·自动化·openstack
zxd02031118 小时前
EFK(Elasticsearch + Fluentd + Kibana) 日志收集系统
运维·docker·jenkins
终端行者18 小时前
Jenkins Pipeline 企业级用法 参数化构建+Ansible发布---上
docker·ansible·jenkins·cicd
亚空间仓鼠19 小时前
Docker容器化高可用架构部署方案(十三)
docker·容器·架构
米高梅狮子20 小时前
01.mysql的备份与恢复
运维·数据库·mysql·docker·容器·kubernetes·github
console.log('npc')20 小时前
Windows 11 → WSL2 → Ubuntu → Docker → Codex → Sub2API
windows·ubuntu·docker
云游牧者21 小时前
K8S存储体系全解-从PV-PVC-SC到StatefulSet持久化实战
云原生·容器·kubernetes·pvc·pv·sc·进阶存储卷