我创建了一个本地docker注册表。我遵循的步骤。 创建证书文件。
mkdir -p /etc/docker/certs.d/123.456.78.9:5000
cp domain.crt /etc/docker/certs.d/123.456.78.9:5000/ca.crt
cp domain.crt /usr/local/share/ca-certificates/ca.crt
update-ca-certificates
已安装official guide中给出的Docker注册表
docker run -d -p 5000:5000 --restart=always --name registry -v $PWD/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e
REGISTRY_HTTP_TLS_KEY=/certs/domain.key registry:2
拉入并推送Docker映像:
docker pull ubuntu:16.04
docker tag ubuntu:16.04 mydocker_registry/my_ubuntu
docker push mydocker_registry/my-ubuntu
我的图片推送尝试访问docker.io
,因此错误很明显。
The push refers to repository [docker.io/mydocker_registry/my_ubuntu]
03901b4a2ea8: Preparing
denied: requested access to the resource is denied
我的/etc/hosts
文件看起来像这样
123.456.78.9 mydocker_registry
在这里,我觉得我错过了一些小步骤。我不知道这一点。 预先感谢。
答案 0 :(得分:2)
尝试将您的注册表添加为不安全的注册表。
如果您使用的是Linux,请在daemon.json
下编辑/etc/docker
添加
{
"insecure-registries" : ["registry-ip:registry-port"]
}
并在终端中运行
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
答案 1 :(得分:1)
您需要在标记中添加您的注册表URL,如果本地注册表URL不是您的Docker映像标记的一部分,默认情况下它将推送到官方Docker注册表。
这就是为什么您在推送日志中看到
The push refers to a repository [docker.io/mydocker_registry/my_ubuntu]
所以您添加的所有内容都会添加Docker注册表的完整路径。
docker tag ubuntu:16.04 123.456.78.9:5000/mydocker_registry/my_ubuntu
docker push 123.456.78.9:5000/mydocker_registry/my_ubuntu
这里123.456.78.9
是指您的本地注册表。如果它是本地主机,则用123.456.78.9
来localhost
如果可以访问,可以在浏览器中验证注册表访问权限。
https://myregistry.com/v2/_catalog
or
http://localhost:5000/v2/_catalog
答案 2 :(得分:0)
好吧,经过几天的阅读和尝试,由于/ r / docker redditters:-)
的帮助,我已经解决了我的问题。请注意,这仅适用于您的本地域
我的网域是registry.myregistry.com
。
openssl req -newkey rsa:4096 -nodes -sha256 -keyout registry.myregistry.com.key -x509 -days 365 -out registry.myregistry.com.crt
mkdir -p /etc/docker/certs.d/registry.myregistry.com:443
cp registry.myregistry.com.crt /etc/docker/certs.d/registry.myregistry.com:443/ca.crt
cp registry.myregistry.com /usr/local/share/ca-certificates/ca.crt
update-ca-certificates
docker run -d -p 443:443 --restart=always --name registry -v $PWD/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443
-e REGISTRY_HTTP_TLS_CERTIFICATE = / certs / registry.myregistry.com.crt -e REGISTRY_HTTP_TLS_KEY = / certs / registry.myregistry.com.key注册表:2`
docker pull alpine:latest
docker tag alpine:latest registry.myregistry.com:443/myalpine
docker push registry.myregistry.com:443/myalpine
没有错误,成功推送。
要做的是,接受来自同一网络中其他用户的拉取请求。