簡體   English   中英

有什么辦法可以將* .sql添加到docker-entrypoint-initdb.d中並在與Alpine相同的Dockerfile中執行應用程序?

[英]Is any way to “add *.sql to docker-entrypoint-initdb.d” and execute an app in the same Dockerfile with alpine?

我需要在同一個dockerfile中編寫服務和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/85aadc08c347cd20f199902c4b8b4f736341c3b8/11/Dockerfile

進行更改后,您將覆蓋此映像的CMD,這就是為什么您的初始化腳本無法運行的原因。 您可以在此處檢查啟動腳本: https : //github.com/docker-library/postgres/blob/master/docker-entrypoint.sh

同樣對於Postgres,確保在兩次運行之間刪除卷也很重要。 如果存在該卷,則無論如何都不會運行初始化腳本。

我的建議是嘗試使用2個容器的方法,而不是嘗試以很好的方式解決無法解決的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM