Перезапустите postgres в среде докера

У меня проблемы с перезапуском докеризованной базы данных postgres (я использую Core OS). База данных запускается в bash-скрипте с помощью команды

# boot.sh
sudo -i -u postgres /usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c config_file=/etc/postgresql/9.3/main/postgresql.conf

который работает. У меня есть другой скрипт, вызываемый confd, который запускается при изменении некоторых ключей etcd (эта часть в порядке, файл называется правильно) и должен перезапускать postgres (не перезагружать, потому что некоторые изменения конфигурации требуют перезапуска). Вот основные варианты, которые я пробовал, но они не увенчались успехом...

# restart.sh
sudo -u postgres /usr/lib/postgresql/9.3/bin/pg_ctl --pgdata=/var/lib/postgresql/9.3/main restart

систематически выдает ошибку:

%FATAL:  lock file "postmaster.pid" already exists
%HINT:  Is another postmaster (PID 273) running in data directory "/var/lib/postgresql/9.3/main"?

Более того,

# restart.sh
rm /var/lib/postgresql/9.3/main/postmaster.pid
sudo -i -u postgres /usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c config_file=/etc/postgresql/9.3/main/postgresql.conf

,

rm /var/lib/postgresql/9.3/main/postmaster.pid
/etc/init.d/postgresql start

,

/etc/init.d/postgresql restart

а также

exec su postgres -c "/usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c config_file=/etc/postgresql/9.3/main/postgresql.conf"

потерпеть неудачу с

ERROR exit status 1

Любая мысль? Заранее спасибо!


person Raphael    schedule 14.11.2014    source источник
comment
С одной стороны, на моем сервере Ubuntu работает без ошибок перезагрузка.sh, состоящая только из этой строки: sudo -i -u postgres /usr/lib/postgresql/9.3/bin/pg_ctl restart -D /var/lib/postgresql/9.3/main. (Я не вижу этого синтаксиса в вашем вопросе.) С другой стороны, я не запускаю его в контейнере Docker.   -  person Mike Sherrill 'Cat Recall'    schedule 14.11.2014
comment
Спасибо, Майк, это работает на сервере Ubuntu. Проблема вроде завязана на Core OS или Docker, но я пока точно не знаю в чем она заключается...   -  person Raphael    schedule 14.11.2014
comment
попробуйте добавить –cap-add SYS_PTRACE в команду запуска докера   -  person Usman Ismail    schedule 14.11.2014


Ответы (1)


Для меня изменение конфигурации и выполнение

$ docker restart <postgres_container>

на хосте работает нормально.

person Risadinha    schedule 30.05.2017
comment
@MikhailM - докер отправляет сигнал sigterm и убивает только через столько секунд (по умолчанию может быть 10 секунд). Если это слишком мало, вы можете увеличить это время. См. docs.docker.com/engine/reference/commandline/stop. - person Risadinha; 28.08.2018