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

应用背景

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

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

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

实现思路

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

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

基于命令是可以拿得到的

实现方式

命令行

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

# 创建镜像仓库证书目录,xxx.com.cn需替换为镜像仓库域名,如端口非443则需要追加:portmkdir -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.cndocker pull xxx.com.cn/somepath/nginx:latest

示例:

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脚本

cat > add-insecure-repo.sh <<EOF#/bin/bashif [ "\$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.crtelse	echo -n | openssl s_client -connect \$REPO:443 2>/dev/null | openssl x509 > /etc/docker/certs.d/\$REPO/ca.crtfiEOF # 执行示例sh add-insecure-repo.sh harbor.test.com.cn:5000

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

参考:

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYb0QNCG' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片