Py学习  »  docker

将docker卷导出到另一台机器

Manuel • 2 年前 • 494 次点击  

我目前正在尝试将redmine与postgres数据库一起使用,但在设置环境时遇到了一些问题。

假设我有下面的撰写文件

  db-redmine:
    image: 'bitnami/postgresql:11'
    user: root
    container_name: 'orchestrator_redmine_pg'
    environment:
      - POSTGRESQL_USERNAME=${POSTGRES_USER}
      - POSTGRESQL_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRESQL_DATABASE=${POSTGRES_DB}
      - BITNAMI_DEBUG=true
    volumes:
      - 'postgresql_data:/bitnami/postgresql'

  redmine:
    image: 'bitnami/redmine:4'
    container_name: 'orchestrator_redmine'
    ports:
      - '3000:3000'
    environment:
      - REDMINE_DB_POSTGRES=orchestrator_redmine_pg
      - REDMINE_DB_USERNAME=${POSTGRES_USER}
      - REDMINE_DB_PASSWORD=${POSTGRES_PASSWORD}
      - REDMINE_DB_NAME=${POSTGRES_DB}
      - REDMINE_USERNAME=${REDMINE_USERNAME}
      - REDMINE_PASSWORD=${REDMINE_PASSWORD}
    volumes:
      - 'redmine_data:/bitnami'
    depends_on:
      - db-redmine

volumes:
  postgresql_data:
    driver: local
  redmine_data:
    driver: local

这将为redmine生成postgres数据库,并创建redmine实例。

容器安装好后,我进入redmine实例并配置应用程序,这意味着创建自定义字段、添加跟踪器、问题类型等。需要进行大量设置,所以我不想每次部署此类容器时都这样做。

我想,因为所有的设置数据都将进入卷,所以我可以导出这些卷,然后在新机器上导入它们。这样,当两个应用程序在新机器上启动时,它们将拥有以前设置中的所有必要信息。

这听起来很简单,但我正在努力完成先出口后进口的阶段。

从我所看到的情况来看,我能够出口 postgresql_data .tar 通过执行以下操作进行归档:

docker export postgresql_data --output="postgres_data.tar"

但是如何导入新生成的 焦油 在新机器上归档?如果我没弄错的话,通过导入 焦油 文件到名为 postgresql_数据 在新机器中,来自模板的数据将用于生成新容器。

有没有办法做到这一点?这是在两台主机之间复制设置的正确方法吗?

是在做什么 docker volume create postgresql_data 然后将文件复制到卷目录中?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/128012
 
494 次点击  
文章 [ 2 ]  |  最新文章 2 年前
larsks
Reply   •   1 楼
larsks    2 年前

首先,请注意 docker export 与体积无关;该命令导出一个 容器 文件系统作为tar归档。这不包括已装入卷中的任何内容。

docker run -v postgresql_data:/data alpine tar -C /data -cf- . |
  ssh remotehost docker run -i -v postgresql_data:/data alpine tar -C /data -xf-

这会对现有卷中的所有内容进行tar,并通过ssh连接将其传输到远程主机,在那里我们创建一个新的postgresql_数据容器,并通过提取tar存档来填充它。

特别是对于博士后,你可以 pg_dump pg_restore 而不是使用 tar .

您将不得不修改容器名称,因为您正在使用 docker-compose .

ahmadali shafiee eitann
Reply   •   2 楼
ahmadali shafiee eitann    2 年前

我的建议是使用 pg_dump pg_restore 工具,而不是应对量。 您可以向postgres容器添加装载路径,例如:

db-redmine:
  image: 'bitnami/postgresql:11'
  user: root
  container_name: 'orchestrator_redmine_pg'
  environment:
    - POSTGRESQL_USERNAME=${POSTGRES_USER}
    - POSTGRESQL_PASSWORD=${POSTGRES_PASSWORD}
    - POSTGRESQL_DATABASE=${POSTGRES_DB}
    - BITNAMI_DEBUG=true
  volumes:
    - 'postgresql_data:/bitnami/postgresql'
    - /dump-files:/dump-files

现在登录到容器并运行 pg_dump "Your-db-name" > /dump-files/dump 现在将此文件复制到任何新创建的容器中,并在新容器中运行: pg_restore -d "your-db-name" /dump-files/dump