我们目前有一个具有安全性的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
。
有没有办法可以通过使用证书替换登录命令?
答案 0 :(得分:2)
正如我所看到的,它是docker服务器和私有注册服务器之间SSL身份验证的错误URL。
你可以这样说:
运行域名注册表
虽然在localhost上运行有其用途,但大多数人希望他们的注册表可以更广泛地使用。为此,Docker引擎要求您使用TLS保护它,这在概念上与使用SSL配置Web服务器非常相似。
获取证书
假设您拥有域myregistrydomain.com,并且其DNS记录指向运行注册表的主机,则首先需要从CA获取证书。
创建certs目录:
mkdir -p certs
然后将您的crt文件移动和/或重命名为:certs / domain.crt,并将您的密钥文件重命名为: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 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