我们目前有一个 docker 注册表设置,它具有安全性。通常,为了访问它,从开发人员的角度来看,我必须对 docker login --username=someuser --password=somepassword --email user@domain.com https://docker-registry.domain.com
进行长时间操作。 .
但是,由于我目前正在尝试在云中自动部署 docker 容器,因此其中一项操作是 docker pull
命令失败,因为未执行登录(如果我在模板中添加登录名,它会起作用,但这很糟糕)。
有人建议我使用证书来允许完成拉取(.crt 文件)。我尝试使用此处说明的步骤安装证书:https://www.linode.com/docs/security/ssl/ssl-apache2-centos
但这似乎不起作用,我仍然需要手动登录才能执行我的docker pull
从注册表。
有没有办法可以通过使用证书来替换登录命令?
最佳答案
如我所见,在 docker 服务器和私有(private)注册表服务器之间进行 SSL 身份验证的 URL 是错误的。
你可以按照这个:
运行域注册表
虽然在 localhost 上运行有其用途,但大多数人希望他们的注册表更广泛可用。为此,Docker 引擎要求您使用 TLS 对其进行保护,这在概念上与使用 SSL 配置您的 Web 服务器非常相似。
获得证书
假设您拥有域 myregistrydomain.com,并且其 DNS 记录指向您运行注册表的主机,您首先需要从 CA 获取证书。
创建证书目录:
mkdir -p certs
然后将您的 crt 文件移动和/或重命名为:certs/domain.crt,并将您的 key 文件移动和/或重命名为:certs/domain.key。
确保您从前面的步骤中停止了您的注册表,然后在启用 TLS 的情况下再次启动您的注册表:
docker run -d -p 5000:5000 --restart=always --name registry \
-v `pwd`/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2
您现在应该能够从另一个 docker 主机访问您的注册表:
docker pull ubuntu
docker tag ubuntu myregistrydomain.com:5000/ubuntu
docker push myregistrydomain.com:5000/ubuntu
docker pull myregistrydomain.com:5000/ubuntu
明白了
证书颁发者可能会为您提供中间证书。在这种情况下,您必须将您的证书与中间证书组合以形成一个证书包。您可以使用 cat 命令执行此操作:
cat domain.crt intermediate-certificates.pem > certs/domain.crt
关于centos - 在 Centos 7 上安装证书以访问 docker 注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34621733/