将 docker 卷导出到另一台机器
Export docker volume to another machine
我目前正在尝试将 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"
但是如何在新机器上导入新生成的.tar
文件呢?如果我没记错的话,通过将 .tar
文件导入新机器中名为 postgresql_data
的卷,模板中的数据将用于生成新容器。
有办法吗?这是在两个主机之间复制设置的正确方法吗?
做类似 docker volume create postgresql_data
的事情然后将文件复制到卷目录是可行的方法吗?
首先,请注意 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_data 容器并通过提取 tar存档。
特别是对于 postgres,您可以使用 pg_dump
和 pg_restore
而不是使用 tar
。
您必须 fiddle 您的容器名称,因为您使用 docker-compose
创建它们。
我的建议是使用pg_dump and 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
我目前正在尝试将 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"
但是如何在新机器上导入新生成的.tar
文件呢?如果我没记错的话,通过将 .tar
文件导入新机器中名为 postgresql_data
的卷,模板中的数据将用于生成新容器。
有办法吗?这是在两个主机之间复制设置的正确方法吗?
做类似 docker volume create postgresql_data
的事情然后将文件复制到卷目录是可行的方法吗?
首先,请注意 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_data 容器并通过提取 tar存档。
特别是对于 postgres,您可以使用 pg_dump
和 pg_restore
而不是使用 tar
。
您必须 fiddle 您的容器名称,因为您使用 docker-compose
创建它们。
我的建议是使用pg_dump and 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