Автоматизация запуска Docker postgres не может создать базу данных из-за ошибки

Я хочу создать сценарий оболочки, который автоматизирует создание, запуск и создание базы данных в базе данных postgres с помощью докера.

Я хочу использовать официальный пакет docker postgres для postgres в докере.

Я использую следующий сценарий:

docker network create --subnet=172.18.0.0/16 shared_network;
docker kill postgres_linker;
docker rm postgres_linker;
docker run --name postgres_linker -e POSTGRES_PASSWORD=blahblahblah -d --net shared_network --ip 172.18.0.2 postgres:10-alpine;
docker exec -it postgres_linker psql -U postgres -c "create database linker;";

Но когда я запускаю это, я получаю следующий результат без создания какой-либо базы данных:

Error response from daemon: network with name shared_network already exists
postgres_linker
postgres_linker
b2a9fd4d6e25b62d60adb05c8b6b653a1b55ec7a869c4728677d6289f5cddd63
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Первая строка этого журнала в порядке, вторая и третья тоже. Проблема в том, что psql не запускает команду в контейнере postgres, хотя команда, которую я пытаюсь запустить, верна. Если я запустил последнюю команду отдельно от сценария оболочки:

docker exec -it postgres_linker psql -U postgres -c "create database linker;";

Это не дает мне ошибки! и это работает!
Почему происходит такое поведение?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
1
0
541
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел решение своей проблемы. К сожалению, я подумал, что когда контейнер postgres запущен, сервер сразу же запускается. Это было неправдой, и нужно время, чтобы понять это. поэтому мне нужно было добавить задержку. В результате файл сценария должен выглядеть так:

docker network create --subnet=172.18.0.0/16 shared_network;
docker kill postgres_linker;
docker rm postgres_linker;
docker run --name postgres_linker -e POSTGRES_PASSWORD=blahblahblah -d --net shared_network --ip 172.18.0.2 postgres:10-alpine;
sleep 5;
docker exec -it postgres_linker psql -U postgres -c "create database linker;";

Другие вопросы по теме