我正在 docker 容器中运行 ruby on Rails 应用程序。我想在 postgres 容器中创建并恢复数据库转储。
但是我
以下是我到目前为止所做的事情:
1)添加了 bash 脚本/docker-entrypoint-initdb.d
文件夹。脚本只是创建数据库:
psql -U docker -d postgres -c 'create database dbname;'
RESULT:数据库已创建,但 Rails 服务器退出并显示代码 0。错误:web_1 exited with code 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:数据库创建并恢复数据。但是另一个容器在运行 Web 应用程序服务器时运行docker-compose up
.
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
有人可以帮忙创建和导入数据库吗?
EDIT:
我尝试了另一种方法添加POSTGRES_DB=db_name
环境变量在docker-compose.yml
文件,以便在运行应用程序后创建数据库(docker-compose up
),我将导入数据库。但出现错误:web_1 exited with code 0
.
我很困惑为什么会收到此错误(在第一种和第三种方法中),似乎有些东西搞砸了docker-compose
file.