我创建了在localhost:5000/v1
上运行的私有docker注册表,但它不提供身份验证,如何拥有用户名和密码,以便只有授权用户才能将图像推送到它。
我也无法列出私人注册表中存在的所有图像,所有文档说在命令下运行会列出localhost:5000/v1/search
,但它会给出一个空白的json响应:
{
"num_results": 0,
"query": "",
"results": []
}
如何解决这个问题?
谢谢, 佳日
答案 0 :(得分:1)
对第一个问题的回答:您需要在注册表前使用nginx之类的内容来进行实际的密码身份验证。 pre-1.3.9 nginx中有later versions和Docker Registry Github repo的示例nginx配置文件,用于使用nginx包装注册表;关于authentication configuration on the nginx wiki的更多信息。
答案 1 :(得分:0)
您可以使用htpasswd设置dockers注册表图像的登录。但是,我不相信他们已经在这张图片中实现了搜索功能。要创建用户,我有以下脚本:
#!/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
请注意,我在上面的certs目录下也使用了TLS证书。您可以使用openssl命令创建这些命令(用于保护docker守护程序套接字的命令相同)。