Docker 注册表镜像 - 持久性

标签 docker raspberry-pi registry docker-swarm

我已经创建了 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 --> 这将在同一台机器上创建注册服务器

  1. 运行 docker-compose build --> 使用 docker 文件在本地构建镜像

  2. 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/

相关文章:

python - 文件系统中的 ACID 事务

java - 为什么java Native Memory Tracking中的内部内存在增加

linux-kernel - Yocto 将 initramfs/initrd 镜像挂载到 Raspberry Pi

windows - Vagrant,运行 vagrant up 时出错 --provider=docker

c++ - RaspBerry Pi 的交叉编译

registry - Windows 8 中的 Sublime Text 2 上下文菜单

qt - 使用 QSettings 检查值注册表是否存在

c# - RegistryView.Registry64 从 32 位 View 返回

macos - 从 bash 运行 Boot2Docker

docker - 在 Dockerfile 中设置条件变量