簡體   English   中英

如何在一個Docker容器中運行python應用程序和postgres?

[英]How to run the python application and postgres in one docker container?

我有一個與postgresql數據庫交互的python應用程序,我需要在一個docker容器中運行所有程序。 運行容器時出現連接錯誤:

  ...

  File "/usr/lib/python3.6/asyncio/tasks.py", line 358, in wait_for
    return fut.result()
  File "/usr/lib/python3.6/asyncio/base_events.py", line 787, in create_connection
    ', '.join(str(exc) for exc in exceptions)))
OSError: Multiple exceptions: [Errno 111] Connect call failed ('::1', 5432), [Errno 111] Connect call failed ('127.0.0.1', 5432)

我的Dockerfile

FROM postgres:10.0-alpine
RUN apk add --update --no-cache g++ alpine-sdk
RUN apk --no-cache add python3-dev
RUN apk add --no-cache python3 && \
    python3 -m ensurepip && \
    rm -r /usr/lib/python*/ensurepip && \
    pip3 install --upgrade pip setuptools && \
    if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi && \
    if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi && \
    rm -r /root/.cache    
ADD app /app/   
RUN chmod -R 777 /app 
WORKDIR /app
ADD requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
USER postgres
RUN chmod 0700 /var/lib/postgresql/data &&\
    initdb /var/lib/postgresql/data &&\
    echo "host all  all    0.0.0.0/0  md5" >> /var/lib/postgresql/data/pg_hba.conf &&\
    echo "listen_addresses='*'" >> /var/lib/postgresql/data/postgresql.conf &&\
    pg_ctl start &&\
    psql --command "ALTER USER postgres WITH ENCRYPTED PASSWORD 'postgres';"
EXPOSE 5432
EXPOSE 80
CMD ["python3", "main.py"]

@Anton,不建議在Docker容器中運行多個進程。 請查看此鏈接https://docs.docker.com/config/containers/multi-service_container/ ,它將進一步說明並演示實現此目的的方法。 您可能已經知道,但是您的容器將運行postgresql實例並在其中包含數據,因此,如果您重新創建該容器,則將丟失該容器中的任何數據。

盡管不建議這樣做,但這是可行的。 問題是在構建時而不是在容器中執行RUN指令中的pg_ctl 您需要使用CMD運行它。

你可以有一個像

pg_ctl start
psql --command "ALTER USER postgres WITH ENCRYPTED PASSWORD 'postgres';"
python3 main.py

在映像中和dockerfile末尾的腳本“ CMD [“ ./script.sh”]中COPY腳本。

暫無
暫無

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

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