Есть ли способ «добавить * .sql в docker-entrypoint-initdb.d» и запустить приложение в том же Dockerfile с помощью alpine? - PullRequest
0 голосов
/ 30 апреля 2019

Мне нужно написать в одном и том же dockerfile сервис и BBDD, и я использую образ с alpine и postgresql. Мой докер-файл выглядит так:

FROM postgres:11.2-alpine


ENV DEBIAN_FRONTEND=noninteractive

RUN apk update && \
    apk add --virtual build-deps gcc python-dev musl-dev && \
    apk add netcat-openbsd

RUN apk update && \
    apk add py-pip

RUN echo $(ls)
RUN echo $(find . -type d -name "postgresql")

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

#ADD /db/create.sql /docker-entrypoint-initdb.d
#RUN su - postgres

RUN /etc/init.d/postgresql start &&\ 
    psql -f /db/create.sql

COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip install -r requirements.txt

COPY . /usr/src/app

RUN chmod 777 manage.py

EXPOSE 5000
EXPOSE 5432

CMD python manage.py runserver --host 0.0.0.0

Проблема в том, что если я напишу "ADD * .sql /docker-entrypoint-initdb.d", файл sql не будет выполнен. Я попытался выполнить другим способом, выполнив RUN /etc/init.d/postgresql start && \ psql -f /db/create.sql, но это не работает, потому что инициализация postgresql отсутствует.

Заранее спасибо.

1 Ответ

1 голос
/ 30 апреля 2019

Это не будет работать так, и в основном потому, что вы не должны это делать. Обычно база данных и приложение должны работать в разных контейнерах.

Это Dockerfile для изображения posgres: https://github.com/docker-library/postgres/blob/85aadc08c347cd20f199902c4b8b4f736341c3b8/11/Dockerfile

С вашими изменениями вы перезаписываете CMD этого образа, и поэтому ваши сценарии инициализации не запускаются. Вы можете проверить скрипт запуска здесь: https://github.com/docker-library/postgres/blob/master/docker-entrypoint.sh

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

Я советую попробовать подход с двумя контейнерами вместо того, чтобы исправлять эту проблему, которая не может быть исправлена ​​хорошим способом.

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