Enable HTTPS in dockerd
在Ubuntu中安装Docker后,默认会监听本地的socket地址,可以通过/etc/systemd/system/multi-user.target.wants/docker.service
看到启动参数为ExecStart=/usr/bin/dockerd -H fd://
,如果我们想通过远程访问的方式连接到这台主机,使用这台主机的Docker,则需要添加如下参数:
1 |
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 --containerd=/run/containerd/containerd.sock --tlsverify --tlscacert /etc/docker/ssl/ca.pem --tlscert /etc/docker/ssl/cert.pem --tlskey /etc/docker/ssl/key.pem |
其中使用到的证书可以通过如下命令来生成:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# 创建CA的私钥和公钥 openssl genrsa -aes256 -out ca-key.pem 4096 openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem # 创建服务端的密钥 openssl genrsa -out server-key.pem 4096 # 创建证书签名请求 openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr # 为服务端的公钥签发证书(注意修改IP地址为连接发起方的IP地址) echo subjectAltName = DNS:$HOST,IP:10.10.10.20,IP:127.0.0.1 >> extfile.cnf echo extendedKeyUsage = serverAuth >> extfile.cnf openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \ -CAcreateserial -out server-cert.pem -extfile extfile.cnf # 创建客户端的密钥 openssl genrsa -out key.pem 4096 # 创建证书签名请求 openssl req -subj '/CN=client' -new -key key.pem -out client.csr # 为客户端的密钥签发证书 echo extendedKeyUsage = clientAuth > extfile-client.cnf openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \ -CAcreateserial -out cert.pem -extfile extfile-client.cnf # 删除中间文件 # 将{ca,server-key,server-cert}.pem拷贝至/etc/docker/ssl # 将{ca,key,sert}.pem拷贝至客户端的~/.docker目录 |
然后重新加载配置,并重启docker,使用如下命令即可:
1 2 |
sudo systemctl deamon-reload sudo systemctl restart docker |
重启完成后,在将/etc/docker/ssl
内的文件拷贝到需要远程访问的主机内,一般我们使用目录~/.docker
,然后在该主机上配置环境变量:
1 2 3 |
DOCKER_CERT_PATH=$HOME/.docker DOCKER_HOST=tcp://IP:PORT DOCKER_TLS_VERIFY=1 |
然后执行命令docker info
难即可。
PS:Ubuntu每次升级docker都会重置docker.service内的内容,如何持久化上面的修改,还待改进。
PS:上面的证书签发了1年的时候,过期后重新执行签发证书操作即可。
近期评论