不重启Docker能添加自签SSL证书镜像仓库吗?

应用背景

在企业应用Docker规划初期配置非安全镜像仓库时,有时会遗漏一些仓库没配置,但此时应用程序已经在Docker平台上部署起来了,体量越大就越不会让人去直接重启Docker。

那么,不重启Docker能添加自签SSL证书镜像仓库吗?

可以,在文中会找到答案。

实现思路

实现思路来自Docker官网(https://docs.docker.com/registry/insecure/),大意是通过复制镜像仓库的自签证书到操作系统目录,或者到docker的配置目录中。这样就可实现不重启使用该仓库了。

这里有个问题是:"某些情况下,例如镜像仓库不是我们搭建的 或 拿不到证书,这时候怎么办?"

基于命令是可以拿得到的

实现方式

命令行

通过openssl输出X.509证书到docker证书目录中实现需求。

bash 复制代码
# 创建镜像仓库证书目录,xxx.com.cn需替换为镜像仓库域名,如端口非443则需要追加:port
mkdir -p /etc/docker/certs.d/xxx.com.cn

# 使用openssl获取镜像仓库的X.509证书,写入刚创建目录下文件中,如端口非443则需替换
echo -n | openssl s_client -connect xxx.com.cn:443 2>/dev/null | openssl x509 > /etc/docker/certs.d/xxx.com.cn/ca.crt

# 测试登录、拉取等操作
docker login xxx.com.cn
docker pull xxx.com.cn/somepath/nginx:latest

示例:

bash 复制代码
mkdir -p /etc/docker/certs.d/harbor.test.com.cn:5000

echo -n | openssl s_client -connect harbor.test.com.cn:5000 2>/dev/null | openssl x509 > /etc/docker/certs.d/harbor.test.com.cn:5000/ca.crt

docker login harbor.test.com.cn:5000

Shell脚本

bash 复制代码
cat > add-insecure-repo.sh <<EOF
#/bin/bash
if [ "\$1x" == "x" ]; then
	echo "请输入镜像仓库地址";
	exit;
fi

REPO=\$1
#包含:443需去除
if [[ "\$1" =~ ":443" ]]; then
	REPO=\${1%:443*}
fi
#包含https://需去除
if [[ "\$REPO" =~ "https://" ]]; then
	REPO=\${REPO#*https://}
fi

mkdir -p /etc/docker/certs.d/\$REPO
#带端口号的不加:443,不带的需要加
if [[ "\$REPO" =~ ":" ]]; then
	echo -n | openssl s_client -connect \$REPO 2>/dev/null | openssl x509 > /etc/docker/certs.d/\$REPO/ca.crt
else
	echo -n | openssl s_client -connect \$REPO:443 2>/dev/null | openssl x509 > /etc/docker/certs.d/\$REPO/ca.crt
fi
EOF

# 执行示例
sh add-insecure-repo.sh harbor.test.com.cn:5000

写作不易,如果有用就点个赞再走呗!~

参考:

相关推荐
九皇叔叔11 小时前
Kubernetes 资源管理方式详解:命令式与声明式管理
docker·容器·k8s
Lsetea16 小时前
Nginx报No required SSL certificate was sent:mTLS客户端证书排查
运维·nginx·https·ssl·openssl
程序猿小郑17 小时前
Docker Compose 构建完整服务实战指南:从入门到最佳实践
docker·容器
行百里er20 小时前
5 分钟跑起 Redis(Docker 版)
redis·后端·docker
Mr.朱鹏20 小时前
Docker三剑客实战指南:Docker、Dockerfile 和 Docker Compose
python·docker·devops·dockerfile
鬼先生_sir21 小时前
Docker 完整教程
docker
java_logo21 小时前
Docker 一键部署 Jellyfin:快速搭建私有化媒体服务器
docker·私有化部署·jellyfin·硬件加速·媒体服务器·轩辕镜像·影音库
jianpeng的工程笔记1 天前
WeKnora 搭建研发 EDA 知识库:Docker 部署、RAG 与 Wiki 实践
docker·知识库·eda·rag
ZeroNews内网穿透1 天前
内网部署 Halo 建站,用 ZeroNews 免费内网穿透安全发布到公网(无公网 IP 也能 HTTPS 访问)
docker·https·内网穿透·nas·反向代理·halo·zeronews
九皇叔叔2 天前
K8S 资源菜单
docker·容器·kubernetes·k8s