gpt4 book ai didi

ruby-on-rails - 错误 : Postgres database import in docker container

转载 作者:IT老高 更新时间:2023-10-28 12:46:26 25 4
gpt4 key购买 nike

我正在 docker 容器中运行 ruby​​ on rails 应用程序。我想在 postgres 容器中创建然后恢复数据库转储。但我是

以下是我目前所做的:

1)/docker-entrypoint-initdb.d 文件夹中添加了 bash 脚本。脚本只是创建数据库:

psql -U docker -d postgres -c 'create database dbname;'

结果: 数据库已创建,但 rails 服务器以代码 0 退出。错误:web_1 以代码 0 退出

2)docker-compose up之前添加了要执行的脚本。

# Run docker db container
echo "Running db container"
docker-compose run -d db

# Sleep for 10 sec so that container have time to run
echo "Sleep for 10 sec"
sleep 10

echo 'Copying db_dump.gz to db container'
docker cp db_dump/db_dump.gz $(docker-compose ps -q db):/

# Create database `dbname`
echo 'Creating database `dbname`'
docker exec -i $(docker-compose ps -q db) psql -U docker -d postgres -c 'create database dbname;'

echo 'importing database `dbname`'
docker exec -i $(docker-compose ps -q db) bash -c "gunzip -c /db_dump.gz | psql -U postgres dbname"

RESULT:数据库创建和恢复的数据。但是另一个容器在使用 docker-compose up 运行 Web 应用程序服务器时运行。

docker--compose.yml:

version: '2'

services:

db:
image: postgres

environment:
- POSTGRES_PASSWORD=docker
- POSTGRES_USER=docker

web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0' -d
image: uname/application
links:
- db
ports:
- "3000:3000"
depends_on:
- db
tty: true

有人可以帮忙创建和导入数据库吗?

编辑:

我尝试了另一种方法,在 docker-compose.yml 文件中添加 POSTGRES_DB=db_name 环境变量,以便在运行应用程序后创建数据库( docker-compose up),我将导入数据库。但出现错误:web_1 exited with code 0.

我很困惑为什么我会收到这个错误(在第一种和第三种方法中),似乎是 docker-compose 文件中的某些东西搞砸了。

最佳答案

设置数据库转储装载

您需要将转储装载到容器中,以便访问它。在 docker-compose.yml 中是这样的:

db:
volumes:
- './db_dump:/db_dump'

创建一个名为 db_dump 的本地目录并将您的 db_dump.gz 文件放在那里。

启动数据库容器

在环境中使用 POSTGRES_DB (如您在问题中提到的)自动创建数据库。自行启动 db,无需 Rails 服务器。

docker-compose up -d db

导入数据

等待几秒钟以使数据库可用。然后,导入您的数据。

docker-compose exec db gunzip /db_dump/db_dump.gz
docker-compose exec db psql -U postgres -d dbname -f /db_dump/db_dump.gz
docker-compose exec db rm -f /db_dump/db_dump.gz

您也可以只编写一个脚本来执行此导入,将其粘贴到您的图像中,然后使用单个 docker-compose 命令来调用它。或者您可以让您的入口点脚本检查是否存在转储文件,如果存在,请将其解压缩并导入...无论您需要做什么。

启动 Rails 服务器

docker-compose up -d web

自动化

如果您手动执行此操作以准备新设置,那么您就完成了。如果您需要将其自动化到工具链中,您可以在脚本中执行其中的一些内容。只需单独启动容器,在其间进行 db 导入,然后使用 sleep 来覆盖任何启动延迟。

关于ruby-on-rails - 错误 : Postgres database import in docker container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41395427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com