我已经创建了 docker private registry 并且能够从同一网络中的其他 raspi 推送和拉取(将 registry ip 添加到 insecure-registry 选项)
docker push registry-ip:5000/image
但是当我的注册表服务器机器重新启动时,我无法看到存储库镜像,我需要再次将镜像推送到注册表主机:
curl -v registry-server-ip:5000/v2/_catalog
什么都不返回
为什么会这样?它应该是持久的,并且应该在注册表中保留图像,因为它存储在 docker 图像中
可以处理这种情况的任何解决方法或任何配置
================更新============================
Docker-Compose.yml
version: '3.4'
services:
service1:
image: ${REGISTRY_SERVER_IP}:5000/service1
build: .
restart: always
deploy:
mode: global
restart_policy:
condition: on-failure
ports:
- 3632:3632
entrypoint:
- init.sh
init.sh 只是运行一些服务器的脚本
Dockerfile 具有带有一些 apt-get install update 命令的基础镜像
我正在运行这个脚本: 1. 创建注册服务器
docker service create --name registry --publish published=5000,target=5000 registry:2
--> 这将在同一台机器上创建注册服务器
运行
docker-compose build
--> 使用 docker 文件在本地构建镜像docker-compose 推送
--> 像在 docker compose 中一样推送到 Registry Server
现在,当我重新启动机器时,容器/服务会自动触发,但存储库中的图像会丢失。
最佳答案
您必须安装一个卷才能持久保存您的数据,您可以使用 the docs 中提到的 volume
选项来完成此操作.通过应用它,您的图像将变成这样:
version: '3.4'
services:
service1:
image: ${REGISTRY_SERVER_IP}:5000/service1
build: .
restart: always
deploy:
mode: global
restart_policy:
condition: on-failure
ports:
- 3632:3632
volumes:
- /path/to/local:/var/lib/registry
entrypoint:
- init.sh
注意:将 :
之前的部分更改为您要持久化数据或使用命名卷的本地路径
关于Docker 注册表镜像 - 持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53888028/