当我运行docker-compose up
命令时,出现此错误:
django.db.utils.OperationalError: could not translate host name "postgres_db" to address: Temporary failure in name resolution
我的 docker-compose.yml 文件:
version: "3.5"
services:
redis:
image: redis:latest
networks:
- redisnet
postgres_db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
django_wsgi:
container_name: django_wsgi
build:
context: .
command: uwsgi --socket=:9000 --module=core.wsgi:application --py-autoreload=1
volumes:
- .:/code
env_file:
- .env
networks:
- webnet
- redisnet
links:
- redis
- postgres_db:postgres_db
depends_on:
- postgres_db
django_asgi:
container_name: django_asgi
build: .
# command: python manage.py runserver 0.0.0.0:8002
command: daphne -b 0.0.0.0 -p 8002 core.asgi:application
env_file:
- .env
volumes:
- .:/code
networks:
- webnet
- redisnet
links:
- redis
- postgres_db:postgres_db
depends_on:
- postgres_db
nginx:
image: nginx:1.15.0
depends_on:
- django_asgi
- django_wsgi
volumes:
- ./nginx:/etc/nginx/conf.d
- ./static:/static
networks:
- webnet
ports:
- "80:80"
networks:
webnet:
redisnet:
我的 Dockerfile:
FROM python:3.8
ENV PYTHONUNBUFFERED 1
ENV REDIS_HOST "redis"
RUN mkdir /code
WORKDIR /code
RUN pip install --upgrade pip
RUN pip install psycopg2
COPY requirements.txt /code/
RUN pip install uwsgi
RUN apt-get update && apt-get install -y tdsodbc unixodbc-dev
RUN pip install -r requirements.txt
ADD . /code/
我的 nginx default.conf 文件:
upstream django_wsgi {
server django_wsgi:9000;
}
upstream django_asgi {
server django_asgi:8002;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80 default_server;
root /usr/src/app;
index index.html;
client_max_body_size 60M;
location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass django_wsgi;
uwsgi_param Host $host;
uwsgi_param X-Real-IP $remote_addr;
uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
uwsgi_param X-Forwarded-Proto $http_x_forwarded_proto;
}
location /chat/stream/ {
proxy_pass http://django_asgi;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
location /static {
alias /static;
}
}
我认为由于某种原因我的 postgresql 镜像不可见 - 但该镜像已创建,我可以在 Docker Desktop 中看到它。
最佳答案
问题是您为 djangouwsgi 服务声明了一个网络:
networks:
- webnet
- redisnet
这意味着该容器只能联系 webnet
或 redisnet
网络中的容器。
另一方面,您没有为 postgres_db
服务设置任何网络,因此该服务无法与其他服务进行通信。
我建议向 postgres 服务添加一个网络,并将 djangouwsgi 包含在同一网络下。
另一种选择是仅删除所有网络定义,因此 compose 文件内的所有容器都将位于同一网络上,并且它们将能够相互通信。
关于django - 我在我的项目中使用 django、postgresql、redis、channels、Docker 工具。我对 Docker postgresql 镜像有一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75071178/