gpt4 book ai didi

django - Docker postgres

转载 作者:行者123 更新时间:2023-11-29 13:13:31 24 4
gpt4 key购买 nike

docker- 有问题。我用 Postgres 作为数据库编写 Django 项目,并希望将其 dockerize。所以问题是:当我构建容器时有一个异常(exception):

...
polls | Is the server running on host "postgres" (172.19.0.2) and accepting
polls | TCP/IP connections on port 5432?

但如果我第二次这样做 - 一切正常并且服务器已启动。

docker 文件:

FROM python:3
ENV PYTHONUNBUFFERED 1

RUN mkdir /code
WORKDIR /code

ADD requirements.txt /code/
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ADD . /code/

docker-compose.yml:

version: '3'

services:
postgres:
image: postgres:latest
container_name: polls_db
env_file:
- ./src/main/.env
volumes:
- ./postgres/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d

polls:
build: .
container_name: polls

volumes:
- .:/code
env_file:
- ./src/main/.env
ports:
- "8000:8000"
depends_on:
- postgres
command: bash -c "python src/manage.py migrate && python src/manage.py runserver 0.0.0.0:8000"

最佳答案

就像 David Maze 在评论中所说的那样,听起来您的数据库还没有准备好在启动 postgres 容器和数据库实际准备好接受新连接之间采取行动。您已将 polls 服务设置为也立即开始迁移,这意味着它希望数据库在它开始运行的那一刻就可用。

Docker has some suggestions for this .基本上,编写一个包装器脚本用作您的入口点,例如:

#!/bin/bash

count=1
until [ $count -eq 5 ]
do
sleep 3
python src/manage.py migrate && break
count=$((count + 1))
done

if [ $count -lt 5 ]; then
python src/manage.py runserver 0.0.0.0:8000
fi

一些 bash 向导可能会发现这个脚本有问题,因为我没有测试它(随意发表评论):) 这个想法是,尝试在之前运行几次迁移放弃。您还可以通过 psql/curl/wget 使用更快的测试,我选择使用 manage.py migrate,因为上述这些工具通常未安装在库存 Docker 镜像上。

关于django - Docker postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51828918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com