python - Docker django.db.utils.OperationalError:无法将主机名“db”转换为地址:名称解析暂时失败
问题描述
似乎是一个常见的错误。我遵循了关于 Stackoverflow 的所有可能建议(添加链接、网络等),但在我的情况下没有任何区别。我在 Windows 上运行。
我的 Dockerfile:
#Pull base image.
FROM python:3.9.5-slim
#Usefull to get logs
ENV PYTHONUNBUFFERED 1
#Make local dir
RUN mkdir -p /app
#set as the working directory
WORKDIR /app
#https://luis-sena.medium.com/creating-the-perfect-python-dockerfile-51bdec41f1c8
COPY requirements.txt .
#now copy all the files in this directory to \code
ADD . .
#https://testdriven.io/blog/dockerizing-django-with-postgres-gunicorn-and-nginx/
RUN apt-get update && \
apt-get install -y postgresql-server-dev-all gcc python3-dev musl-dev && \
pip install -r requirements.txt && \
adduser --disabled-password --no-create-home app
USER app
#CMD python manage.py runserver
CMD gunicorn --bind 0.0.0.0:8000 app.wsgi:application -k eventlet
接下来,我的 docker-compose.yml:
services:
web:
build: .
ports:
- "8000:8000"
volumes:
- .:/app
links:
- db:db
container_name: heritageapi_web_1
depends_on:
- db
networks:
- heritage-network
db:
image: postgres:13.3
container_name: db
restart: always
networks:
- heritage-network
environment:
POSTGRES_DATABASE: admin
POSTGRES_USER: root
POSTGRES_PASSWORD: root
POSTGRES_ROOT_PASSWORD: root
volumes:
- .dbdata:/var/lib/postgres
ports:
- "32768:5432"
networks:
heritage-network:
driver: bridge
我的 .env: DB_NAME=admin DB_USER=root DB_PASSWORD=root DB_HOST=db DB_PORT=5432
最后是我的settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.getenv('DB_NAME'),
'USER': os.getenv('DB_USER'),
'PASSWORD': os.getenv('DB_PASSWORD'),
'HOST': os.getenv('DB_HOST'),
'PORT': os.getenv('DB_PORT'),
}
}
解决方案
我在 Web 容器中看不到 .env 文件。它应该是这样的:
services:
web:
depends_on:
- db
env_file:
- .env.dev
如果一切正常,然后进入正在运行的 docker 容器docker-compose exec
并打印
python manage.py shell
>> from django.conf import settings
>> settings.DB_HOST
推荐阅读
- python - python asyncio/aiohttp 跨项目共享全局变量
- arrays - 使用 SciPy 读取 MATLAB MAT 文件时出现“期望 miMATRIX 类型”错误
- javascript - 使用指针将 C++ 转换为 JavaScript(节点)*
- python - Pandas:按未知时间段分组
- json - 通过 JSON Id 在 ReactJS 中的特定页面路由
- javascript - 登录后CoreUI React Re-Routing无法正常工作
- android - 是否可以在结果集上使用 SQLite 模式匹配?
- ios - Swift 闭包和执行顺序
- c++ - 使用指针分配数组值
- php - 如果我的评论表中只有他们的 ID,我还能以某种方式获取对图像发表评论的人的用户名吗