1

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

我也无法列出私有注册表中存在的所有图像,所有文件都说在命令下面运行会列出它,localhost:5000/v1/search但它给出了一个空白的 json 响应:

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

如何解决这个问题?

谢谢, 亚什

4

2 回答 2

2

第一个问题的答案:您需要在注册表前使用nginx之类的东西来进行实际的密码验证。Docker Registry Github repo中有用于1.3.9 之前的 nginx更高版本的示例 nginx 配置文件,用于使用 nginx 包装注册表;nginx wiki上有更多关于身份验证配置的信息。

于 2014-09-12T11:53:51.577 回答
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 守护进程套接字的命令相同)。

于 2017-01-24T21:52:13.170 回答