Не удается подключиться к внутреннему серверу, работающему на порту 8000, используя nginx, django и docker

Я потратил два дня, пытаясь разобраться в этом. Я запускаю контейнеры docker, в которых размещен веб-сайт django+react из файла docker compose.

Я могу получить доступ к веб-сайту через порт 80 (IP: http://52.90.163.11:80), но я не могу получить доступ к панели администратора django через порт 8000 (IP должен быть http://52.90.163.11:8000, но он не работает). Я использую AWS для размещения моего сайта.

Я просто хочу, чтобы контейнер backend был доступен через порт 8000.

У меня есть два файла docker compose. Один я собираю на своей локальной машине. После сборки на локальной машине я отправляю образы на dockerhub. Второй dockerfile находится на сервере AWS и использует образы из первой сборки.

Вот мой файл docker-compose на моей локальной машине для создания образов.

version: '3'

services:
  backend:
    build:
      context: ./backend/src
    command: gunicorn djreact.wsgi --bind 0.0.0.0:8000
    ports:
      - 8000:8000
    depends_on:
      - pgdb
  pgdb:
    image: postgres
    environment:
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - pgdata:/var/lib/postgresql/data
  frontend:
    build:
      context: ./frontend/gui 
    volumes:
      - react_build:/frontend/build
  nginx:
    image: nginx:latest
    ports:
      - 80:8080
    volumes:
      - ./nginx/nginx_setup.conf:/etc/nginx/conf.d/default.conf:ro
      - react_build:/var/www/react
    depends_on:
      - backend
      - frontend

volumes:
  react_build:
  pgdata:

Вот мой dockerfile на моем сервере AWS. Он использует образы, созданные на моей локальной машине.

version: '3'

services:
  backend:
    image: ansariuminhaj/mynacode:mynacode-backend
    command: gunicorn djreact.wsgi --bind 0.0.0.0:8000
    ports:
      - 8000:8000
    depends_on:
      - pgdb
  pgdb:
    image: ansariuminhaj/mynacode:postgres 
    environment:
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - pgdata:/var/lib/postgresql/data
  frontend:
    image: ansariuminhaj/mynacode:mynacode-frontend 
    volumes:
      - react_build:/frontend/build
  nginx:
    image: ansariuminhaj/mynacode:nginx
    ports:
      - 80:8080
    volumes:
      - ./nginx/nginx_setup.conf:/etc/nginx/conf.d/default.conf:ro
      - react_build:/var/www/react
    depends_on:
      - backend
      - frontend

volumes:
  react_build:
  pgdata:

Вот мой файл nginx conf:

upstream api {
      server backend:8000;
}

server {
    listen 8080;

    server_name 52.90.163.11;

    location / {
            proxy_read_timeout 300s;
            proxy_connect_timeout 75s;
        root /var/www/react;
        try_files $uri /index.html;
    }

    location /api/ {
            proxy_read_timeout 300s;
            proxy_connect_timeout 75s;
        proxy_pass http://api;
        proxy_set_header Host $http_host;
    }

}

docker ps показывает это на моем сервере AWS.

КОНТЕЙНЕР ID ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СТАТУС ПОРТЫ ИМЕНА

9852c9738331 ansariuminhaj/mynacode:nginx "/docker-entrypoint...." 9 минут назад Up 9 minutes 80/tcp, 0.0.0.0:80->8080/tcp, :::80->8080/tcp mynacode_nginx_1

b9709cbe37a1 ansariuminhaj/mynacode:mynacode-backend "gunicorn djreact.ws..." 9 минут назад Up 9 minutes ago 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp mynacode_backend_1

5eebbbcae314 ansariuminhaj/mynacode:postgres "docker-entrypoint.s..." 9 минут назад Up 9 minutes 5432/tcp mynacode_pgdb_1

Я пробовал создать новый экземпляр AWS, docker system prune и заново создать образы/объем, но проблема все еще сохраняется.

Итак, я нашел решение! Файлы docker верны. Мне пришлось войти в Amazon Instance и включить порт 8000, чтобы он принимал запросы на этом порту!

Вернуться на верх