Не удается подключиться к внутреннему серверу, работающему на порту 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, чтобы он принимал запросы на этом порту!