Когда я запускаю команду docker-compose up, возникает эта ошибка:
django.db.utils.OperationalError: не удалось перевести имя хоста «postgres_db» на адрес: временный сбой в разрешении имен
Мой файл 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:
Мой докерфайл:
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 в ту же сеть.
Другой вариант — просто удалить все определения сетей, чтобы все контейнеры внутри компоновочного файла находились в одной сети и могли обмениваться данными друг с другом.
Я также рекомендую удалить все блоки networks: во всем файле. links: также устарели и потенциально проблематичны, и я также предлагаю удалить их.
«мое изображение postgresql не видно». Я предполагаю, что вы имеете в виду «контейнер», а не «изображение». Что бы вы ни пытались использовать «docker compose up» без флага -d. Это помогает? Кстати, docker-compose теперь устарел — вы должны правильно установить и использовать «docker compose», docs.docker.com/compose/install/linux.