私有docker存储库的ssl证书

时间:2017-06-14 08:14:15

标签: ssl docker registry

我知道在启用TLS的情况下启动Containerized私有注册表。并将domain.crt复制到其他docker主机以访问注册表。

我有一个私有的Container注册服务器已经运行(不是作为Container,而是来自办公室),我可以使用用户名,密码登录。我怎样才能将它与ssl证书一起使用?

我知道我可以生成CA证书。但是,如何将私钥上传到注册表。比如,使用ssh,我们将密钥上传到Gitlab,以及主机上的公钥。

或者我如何将domain.crt文件从注册表下载到docker host?

我错过了什么?

谢谢和问候

1 个答案:

答案 0 :(得分:1)

几年前我玩过它并使用nginx,配置如下:

{
upstream private-docker-registry {
 server docker_registry:5000;
}

server {
 listen 443 ssl;
 listen 80;
 server_name mydockerregistry.com;

 ssl_certificate /etc/nginx/certs/mydockerregistry.com.crt;
 ssl_certificate_key /etc/nginx/certs/mydockerregistry.com.key;

 proxy_set_header Host       $http_host;   # required for Docker client sake
 proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

 client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads

 # required to avoid HTTP 411: see Issue #1486 (https://github.com/dotcloud/docker/issues/1486)
 chunked_transfer_encoding on;

 location / {
     # let Nginx know about our auth file
     auth_basic              "Restricted";
     auth_basic_user_file    /etc/nginx/authentication/docker-registry.htpasswd;

     proxy_pass http://private-docker-registry;
 }
 location /_ping {
     auth_basic off;
     proxy_pass http://private-docker-registry;
 }
 location /v1/_ping {
     auth_basic off;
     proxy_pass http://private-docker-registry;
 }

创建一个用于身份验证的htpasswd文件,在本例中我称之为docker-registry.htpasswd

然后运行一个链接到docker注册表容器的nginx映像,在这个例子中调用它docker_registry,在这个nginx配置示例中,它将监听端口5000,运行nginx容器将是这样的:

sudo docker run -d \
    --name="nginx_docker_registry" \
    -p 443:443 \
    -p 80:80 \
    --link my_docker_registry_container_name:docker_registry \
    -v "path_to_htpasswd_file_in_host:/etc/nginx/authentication:ro" \
    -v "path_to_certificates_in_host:/etc/nginx/certs:ro" \
    -v "path_to_nginx_conf_in_host:/etc/nginx/nginx.conf:ro" \
    nginx