Docker本地注册表尝试将映像推送到docker.io

时间:2019-09-19 05:20:37

标签: docker ssl registry docker-registry

我创建了一个本地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

在这里,我觉得我错过了一些小步骤。我不知道这一点。 预先感谢。

3 个答案:

答案 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.9localhost

如果可以访问,可以在浏览器中验证注册表访问权限。

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注册表初始化

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映像拉入并推送到注册表中

docker pull alpine:latest

docker tag alpine:latest registry.myregistry.com:443/myalpine

docker push registry.myregistry.com:443/myalpine

没有错误,成功推送。

要做的是,接受来自同一网络中其他用户的拉取请求。

相关问题