gpt4 book ai didi

django - Docker和Django。 django.db.utils.OperationalError:无法连接到服务器

转载 作者:行者123 更新时间:2023-12-02 19:14:14 25 4
gpt4 key购买 nike

我找不到解决方案,请帮忙!
我有 Dockerfile

FROM python:3

ENV PYTHONUNBUFFERED=1

RUN mkdir /app
WORKDIR /app

RUN pip install Django \
&& pip install psycopg2 \
&& pip install jinja2 \
&& pip install Pillow

COPY . /app/
还有 docker-compose.yaml
version: "3"

services:
db:
image: postgres
environment:
- POSTGRES_DB=folivora
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- 5432:5432

site:
image: folivora:latest
command: bash -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
volumes:
- .:/app
depends_on:
- db
ports:
- 8000:8000
还有 settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'folivora',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'db',
'PORT': '5432',
}
}
并且在运行“docker-compose up”时出现 错误
site_1  | django.db.utils.OperationalError: could not connect to server: Connection refused
site_1 | Is the server running on host "db" (192.168.224.2) and accepting
site_1 | TCP/IP connections on port 5432?
当我编辑docker-compose.yaml时,将string命令更改为:
command: bash -c "python manage.py runserver 0.0.0.0:8000"
一切都很好。因此,迁移行破坏了我的代码,但我不知道为什么。
我尝试创建一个空的django项目来检查相同的配置。在第一个“docker-compose up”上,所有程序都开始正常运行,但是从第二个开始,所有程序又因相同的错误而中断。随着时间的流逝,这个问题从测试项目中消失了,我不知道为什么,maby缓存之类的东西。
新信息
  • 在docer-compose.yaml中使用docker-compose up命令运行command: bash -c "python manage.py runserver 0.0.0.0:8000"并捕获错误。
  • 然后按Ctrl + C(从docker退出,组成“shell”),但不执行docker-compose down,因为此命令删除了创建的容器。
  • 在docer-compose.yaml中使用docker-compose up命令运行command: bash -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000",所有操作均已成功启动。

  • 我认为这是不好的解决方案。

    最佳答案

    根据您的编辑,您没有任何网络问题。
    问题是您的Django应用程序在数据库实际运行之前就开始调用迁移命令(您可以在postgres日志中进行检查)。还要注意,depends_to仅管理容器的创建顺序,而不管理容器的就绪状态。
    您可以使用wait-for-it等到您的postgres端口可用。因此,您的command将为:

    bash -c "wait-for-it db:5432 -- python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
    如果您的镜像未安装此软件包,则将 apt install wait-for-it添加到您的Dockerfile中。

    关于django - Docker和Django。 django.db.utils.OperationalError:无法连接到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64401309/

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