有没有办法在与 alpine 相同的 Dockerfile 中"add *.sql to docker-entrypoint-initdb.d"和执行应用程序?



我需要在同一dockerfile a Service和bbdd中写入,并且我正在使用Alpine和PostgreSQL使用图像。我的Dockerfile就是这样:

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的启动不在。

预先感谢。

这不会像这样起作用,主要是因为这不是您应该做的。通常,数据库和应用程序应在不同的容器中运行。

这是Posgres图像的Dockerfile:https://github.com/docker-library/postgres/blob/85aadc08c347cd20f199999999902c4b4b4b4b4b4b4f736341c3b8/11c3b8/11 c3b8/11/dockerfile

随着您的更改,您将覆盖此图像的CMD,这就是为什么您的Init脚本不运行的原因。您可以在此处查看启动脚本:https://github.com/docker-library/postgres/blob/master/master/docker-entrypoint.sh

同样,在Postgres的情况下,必须确保您删除运行之间的卷。如果存在卷,则无论如何都不会运行init脚本。

我的建议是使用2个容器尝试该方法,而不是试图以不错的方式解决此问题。

最新更新