2014-09-12 57 views
0

我已创建我的私人码头注册表运行localhost:5000/v1,但它不提供身份验证,如何拥有用户名和密码,以便只有授权用户可以将图像推送到它。码头私人注册表用户创建

我也无法列出所有存在于私人注册表中的图像,所有的文件说运行以下命令将列出它localhost:5000/v1/search但它提供了一个空白的JSON响应为:

{ 
    "num_results": 0, 
    "query": "", 
    "results": [] 
} 

如何解决这个问题?

感谢, 佳日

回答

1

的回答你的第一个问题:你需要使用类似nginx在注册表的前面做实际的密码验证。在Docker Registry Github repo中有pre-1.3.9 nginxlater versions的示例nginx配置文件,用于用nginx包装注册表;有关于authentication configuration on the nginx wiki的更多信息。

+0

嗨,谢谢你的回应,我看了一下我的私人注册表中的nginx.conf文件。这对身份验证有什么帮助?我尝试通过“docker login <注册表URL>”创建用户帐户,它允许我创建帐户,但无法使用它,因为无需使用任何用户名和密码即可推拉工作。如果你能提供帮助,会很棒。 – priyank 2014-09-18 09:12:47

0

您可以使用htpasswd设置docker注册表映像的登录。但是,我不相信他们已经在这张图片中实现了搜索功能。要创建一个用户,我有以下脚本:

#!/bin/sh 

usage() { echo "$0 user"; exit 1; } 

if [ $# -ne 1 ]; then 
    usage 
fi 

user=$1 

cd `dirname $0` 

if [ ! -d "auth" ]; then 
    mkdir -p auth 
fi 

chmod 666 auth/htpasswd 
docker run --rm -it \ 
    -v `pwd`/auth:/auth \ 
    --entrypoint htpasswd registry:2 -B /auth/htpasswd $user 
chmod 444 auth/htpasswd 

然后运行注册表,我用下面的脚本(来自同一文件夹):

#!/bin/sh 

cd `dirname $0` 

docker run -d -p 5000:5000 --restart=always --name registry \ 
    -v `pwd`/certs:/certs:ro \ 
    -v `pwd`/auth/htpasswd:/auth/htpasswd:ro \ 
    -v `pwd`/registry:/var/lib/registry \ 
    -e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/host-cert.pem" \ 
    -e "REGISTRY_HTTP_TLS_KEY=/certs/host-key.pem" \ 
    -e "REGISTRY_AUTH=htpasswd" \ 
    -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ 
    -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \ 
    -e "REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry" \ 
    registry:2 

请注意,我还使用TLS证书位于certs目录下的上述证书中。您可以使用openssl命令创建这些命令(与保护docker守护程序套接字的命令相同)。