![](/img/trans.png)
[英]STORAGE [main] In File::open(), ::open for '/docker-entrypoint-initdb.d/create_user.js' failed with Permission denied
[英]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.