要让外部主机访问仅在本地可用的注册表,必须先对传输进行 tls 保护。
获取证书
以下假设适用于示例场景:
- 注册表的 URL 是 https://registry.example.com/
- DNS、路由和防火墙配置允许通过端口 443 访问注册主机
- 已从证书颁发机构 CA 获得证书
- 如果已获得中间证书,请参阅使用中间证书
- 创建证书目录
mkdir -p certs
- 如果注册表当前正在运行,请停止它
docker container stop registry
- 重新启动注册表,并指示使用 tls 证书。将 certs 目录绑定挂载到容器中 certs/,并设置环境变量以指示容器定位 domain.crt 与 domain.key 文件。注册表在默认 https 端口 443 上运行。
docker run -d --restart=always --name registry -v ./certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -p 443:443
注册表客户端现在可以通过外部地址从注册表中拉取和推送镜像。示例命令如下:
docker pull ubuntu:16.04 docker tag ubuntu:16.04 registry.example.com/my-ubuntu docker push registry.example.com/my-ubuntu docker pull registry.example.com/my-ubuntu
