【发布时间】:2022-01-03 04:49:46
【问题描述】:
我正在尝试按照本教程对 Django + Postgres 项目进行 Docker 化:https://docs.docker.com/samples/django/
当我运行docker-compose up 时,我得到:
django.db.utils.OperationalError: could not translate host name "db" to address: Name or service not known
Dockerfile
# syntax=docker/dockerfile:1
FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
docker-compose.yml
version: "3.9"
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
environment:
- POSTGRES_NAME=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
depends_on:
- db
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': config('DB_NAME'),
'USER': config('DB_USER'),
'PASSWORD': config('DB_PASSWORD'),
'HOST': config('DB_HOST'),
'PORT': 5432,
}
}
【问题讨论】:
-
我们可以通过几种方式来调试这个问题,我并不是说这是一个解决方案,只是为了调试它,你可以用
command: sleep 30 && python manage.py runserver 0.0.0.0:8000替换command: python manage.py runserver 0.0.0.0:8000。 Postgres 需要几秒钟才能启动,所以这应该确认这不是问题。并且,使用docker exec -it [container id] bash进入容器,看看是否可以连接到运行在db上的数据库,可以使用psql命令行工具。
标签: django docker docker-compose