你可以有一个Dockerregistry与凭据?

假设我在example.com运行dockerregistry,我将通过以下方式下载图像:

 docker pull example.com:5000/image:1 

我怎样才能密码保护这个registry? 它可能包含机密代码/数据。

这在官方文档中提到。 有几种方法来保护Dockerregistry。 请注意,他们都只能使用TLS安全的registry(否则您将以纯文本发送密码或其他凭据,这不会增加任何安全性)。

在registry本身的身份validation

首先创build一个htpasswd格式的凭证文件:

 $ htpasswd -Bbn testuser testpassword > auth/htpasswd 

然后将这个文件挂载到您的registry容器中,并传递REGISTRY_AUTH_HTPASSWD_*环境variables:

 $ docker run -d -p 5000:5000 --restart=always --name registry \ -v `pwd`/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -v `pwd`/certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ registry:2 

代理authentication

使用在主机或其他容器上运行的反向代理(如Nginx)来处理身份validation(在此深入logging):

 upstream docker-registry { server registry:5000; } server { listen 443 ssl; server_name myregistrydomain.com; ssl_certificate /etc/nginx/conf.d/domain.crt; ssl_certificate_key /etc/nginx/conf.d/domain.key; client_max_body_size 0; location /v2/ { auth_basic "Registry realm"; auth_basic_user_file /etc/nginx/conf.d/nginx.htpasswd; proxy_pass http://docker-registry; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 900; } } 

使用令牌服务器的外部authentication

正如你提到的用户名/密码保护,上面的解决scheme之一可能就足够了。 为了完整性,您还可以使用外部身份validation提供程序进行身份validation。 这里指定了令牌服务器需要实现的接口, 这里描述了必要的configuration选项。