Docker镜像仓库 - 持久性

5

我已经创建了 Docker 私有仓库,并且能够在同一网络中的其他树莓派上推送和拉取(将仓库 IP 添加到不安全仓库选项中)。

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 --> 这将在同一台机器上创建注册服务器
2. 运行docker-compose build --> 在本地使用docker文件构建镜像
3. 运行docker-compose push --> 将镜像推送到注册服务器,就像在docker compose中一样
现在,当我重新启动机器时,容器/服务会自动触发,但存储库中的镜像会丢失。

1
请发布您用于设置注册表的Docker Compose或运行命令。 - Sven Hakvoort
更新了关于docker-compose和我正在运行的命令的部分。 - stackjohnny
1个回答

6

为了持久化数据,您需要挂载一个卷,可以使用 文档 中提到的 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 run命令运行,它也可以工作。谢谢。 - stackjohnny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接