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
相关推荐
陈桴浮海1 小时前
Kustomize实战:从0到1实现K8s多环境配置管理与资源部署
云原生·容器·kubernetes
70asunflower3 小时前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
ShiLiu_mtx4 小时前
k8s - 7
云原生·容器·kubernetes
春日见4 小时前
车辆动力学:前后轮车轴
java·开发语言·驱动开发·docker·计算机外设
xuhe25 小时前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr
星火s漫天5 小时前
第一篇: 使用Docker部署flask项目(Flask + DB 容器化)
数据库·docker·flask
MonkeyKing_sunyuhua7 小时前
docker compose up -d --build 完全使用新代码打包的方法
docker·容器·eureka
醇氧8 小时前
【docker】mysql 8 的健康检查(Health Check)
mysql·docker·容器
技术路上的探险家8 小时前
Ubuntu下Docker与NVIDIA Container Toolkit完整安装教程(含国内源适配)
linux·ubuntu·docker
70asunflower11 小时前
用Docker创建不同的容器类型
运维·docker·容器