Я запускаю рубин на приложении rails в контейнере докеров. Я хочу создать, а затем восстановить дамп базы данных в контейнере postgres. Но я
Ниже приведено то, что я сделал до сих пор:
1) Добавлен bash script в папку /docker-entrypoint-initdb.d
. script предназначен для создания базы данных:
psql -U docker -d postgres -c 'create database dbname;'
РЕЗУЛЬТАТ: Создана база данных, но сервер rails вышел с кодом 0. Ошибка: web_1 exited with code 0
2) Добавлен script для выполнения перед 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"
РЕЗУЛЬТАТ: база данных создала и восстановила данные. Но другой контейнер запускается при запуске сервера веб-приложений с помощью 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
.