Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带镜像的Docker私有注册表_Docker_Docker Registry - Fatal编程技术网

带镜像的Docker私有注册表

带镜像的Docker私有注册表,docker,docker-registry,Docker,Docker Registry,我创建了两个Docker容器。第一个是私人Docker注册表,第二个是官方Docker注册表的镜像: docker run -d --name registry -v /local/path/to/registry:/registry -e SETTINGS_FLAVOR=local -e STORAGE_PATH=/registry -p 5000:5000 registry docker run -d --name mirror -v /local/path/to/mirror:/regi

我创建了两个Docker容器。第一个是私人Docker注册表,第二个是官方Docker注册表的镜像:

docker run -d --name registry -v /local/path/to/registry:/registry -e SETTINGS_FLAVOR=local -e STORAGE_PATH=/registry -p 5000:5000 registry

docker run -d --name mirror -v /local/path/to/mirror:/registry -e STORAGE_PATH=/registry -e STANDALONE=false -e MIRROR_SOURCE=https:/registry-1.docker.io -e MIRROR_SOURCE_INDEX=https://index.docker.io -p 5555:5000 registry
现在我想把两者结合起来。每当用户提取映像时,它应该首先查询私有注册表,然后查询镜像。当图像被推送时,它们只应该被推送到私有注册表


我不知道如何做到这一点。非常感谢您的帮助。

存储库名称应为全局名称,即存储库
redis
始终引用Docker Hub的官方redis映像。如果要使用私有注册表,请在存储库名称前加上注册表名,例如
localhost.localdomain:5000/myimage:mytag

因此,当您拉或推时,它将自动转到相关注册表。镜像应该很容易设置,只需使用
--registry mirror=
参数将URL传递给守护进程即可

这对于企业用户来说并不完美,因此,您不能仅仅强制所有docker push命令推送到您的私有注册表。一个原因是,您可以拥有任意数量的寄存器。您必须首先通过标记图像来告诉docker要推到哪里(见下图)

下面是如何设置docker主机以与正在运行的私有注册表和本地镜像一起工作

客户端设置 假设您在名为dockerstore的(可解析)主机上同时运行镜像和私有注册表。端口5555上的镜像,5000上的注册表

然后在客户机计算机上,您应该向docker守护程序启动传递额外的选项。就你而言:

  • 添加
    --注册表镜像=http://dockerstore:5555
    告诉守护进程更喜欢使用本地镜像而不是dockerhub
  • 添加
    --不安全的注册表dockerstore:5000
    ,无需进一步配置即可访问专用注册表。看
  • 重新启动docker守护程序
  • 使用镜子 拉取任何映像时,第一个源将是本地镜像。您可以通过运行docker pull来确认,例如

    docker pull debian
    
    在输出中,将显示一条消息,说明正在从镜像中提取图像-dockerstore:5000

    使用本地注册表 要将推送到私有注册表,首先必须用注册表的全名标记要推送到的图像。确保在中有一个点或冒号,以告诉docker应该将图像推送到私有注册表

    Docker查找“.”(域分隔符)或“:”(端口分隔符),以了解存储库名称的第一部分是位置,而不是用户名

    例如:

    将30d39e59ffe2图像标记为dockerstore:5000/myapp:stable

    将其推送到私有注册表

    docker push dockerstore:5000/myapp:stable
    
    然后你也可以拉

    docker pull dockerstore:5000/myapp:stable
    
    明确地说,我们确认:

    目前无法镜像另一个私有注册表。只有 中央集线器可以镜像


    对不起,我使用这个方法来创建镜像,但它不起作用。你能帮助我吗?404在您的
    --注册表镜像
    链接上。请参阅,以了解我恢复/替换上述丢失内容的请求。问题是如何镜像官方注册,而不是私人注册。此外,应该使用私有注册表,但要镜像。所以,最好的解决方案可能是使用Docker的Red Hat's fork(v1.10)。您可以同时使用“-add registry”和“-registry mirror”标志。我发现这样做还有一个额外的好处,就是可以通过镜像(从官方图书馆)提取图像,将其推回到私有注册中心,然后从私有注册中心提取图像,而无需对图像进行任何重新标记。
    
    docker pull dockerstore:5000/myapp:stable