我找不到解决方案,请帮忙!
我有 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缓存之类的东西。
新信息
docker-compose up
命令运行command: bash -c "python manage.py runserver 0.0.0.0:8000"
并捕获错误。docker-compose down
,因为此命令删除了创建的容器。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/