Docker контейнер останавливается сразу после запуска Postgres DB - PullRequest
0 голосов
/ 01 мая 2018

Я работаю над настройкой Postgres 9.5 AS в Docker и все установил. Проблема, однако, в том, что когда я запускаю Docker Container, кажется, что Postgres запускается сначала, но затем Контейнер сразу останавливается. (он не отображается с docker container ls.). Когда я перезаписываю запуск контейнера с помощью --entrypoint sh и вручную запускаю Postgres, все работает нормально.

Я также проверил с docker logs <container-id>, но это не дает мне никакой информации.

Установка выглядит так:

Dockerfile:

ENTRYPOINT ["/opt/edb/9.5AS/bin/init.sh"]

init.sh:

su enterprisedb -c '/opt/edb/9.5AS/bin/pg_ctl start -D /opt/edb/9.5AS/data'

Из моей командной строки я запускаю:

docker run -it -v pgdata:/opt/edb/9.5AS/data <image_name>

Похоже, что он запускается, но как только процесс запуска завершен, оболочка останавливается, и в результате контейнер также останавливается.

Так как получить так, чтобы контейнер запускался, Postgres запускался, и все продолжало работать, желательно в автономном режиме, конечно?

1 Ответ

0 голосов
/ 01 мая 2018

Изучив еще кое-что, я частично нашел ответ, также обнаружив подсказки по Stackoverflow.

В любом случае, я изменил свой скрипт init.sh, чтобы он выглядел так:

/opt/edb/9.5AS/bin/pg_ctl start -D /opt/edb/9.5AS/data exec
"$@"

И Dockerfile теперь заканчивается, как показано ниже:

USER enterprisedb
ENTRYPOINT ["/opt/edb/9.5AS/bin/init.sh"]
CMD ["/bin/bash"]

Суть решения - последняя строка в скрипте init.sh, а также последняя строка в Dockerfile. Оба вместе делают это так, что после запуска БД запускается новая оболочка (/ bin / bash). Это будет работать на переднем плане, тем самым поддерживая контейнер Запустив контейнер в отдельном режиме, он теперь делает именно то, что нам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...