Я пытаюсь запустить сервис postgresql во время сборки докера.
В моем файле Docker:
RUN /etc/init.d/postgresql start && createdb gis && psql -d gis -c 'CREATE EXTENSION postgis; CREATE EXTENSION hstore;'
Вывод при сборке:
Step 29/29 : RUN /etc/init.d/postgresql start && createdb gis && psql -d gis -c 'CREATE EXTENSION postgis; CREATE EXTENSION hstore;'
---> Running in 7d7848bf2d1a
* Starting PostgreSQL 9.5 database server
...done.
CREATE EXTENSION
Проверка статуса в док-контейнере:
postgres@16ab935bc857:/$ /etc/init.d/postgresql status
9.5/main (port 5432): down
Но выполнение команды непосредственно в контейнере Docker действительно показывает, что она выполнялась раньше и создала контейнер
postgres@16ab935bc857:/$ /etc/init.d/postgresql start && createdb gis && psql -d gis -c 'CREATE EXTENSION postgis; CREATE EXTENSION hstore;'
* Starting PostgreSQL 9.5 database server [ OK ]
createdb: database creation failed: ERROR: database "gis" already exists
Кто-нибудь знает, как правильно запустить службу postgresql в Dockerfile ?
Обновление :
Мое лучшее предположение следующее:
Каждая строка в файле Docker просто представляет новый сеанс bash, но аналогия с выключением системы и загрузкой будет более правильной. Это означает, что все команды в одной строке (связанные с "&&") были пройдены, и мне просто нужно было бы сделать еще один "postgresql start &&" в начале следующей строки или связать другие команды.