Я пытаюсь подключиться к экземпляру django, работающему в докере. Насколько я могу судить, я открыл правильный порт и вижу в docker ps, что на порту 8000 есть tcp, но нет переадресации на порт.
После прочтения документов по созданию докеров на портах я ожидаю, что это сработает (я также могу просматривать pgadmin на 127.0.0.1:9000).
Мой докер составляет:
version: '3'
services:
postgresql:
restart: always
image: postgres:latest
environment:
POSTGRES_USER: pguser
POSTGRES_PASSWORD: pgpassword
POSTGRES_DB: pgdb
pgadmin:
restart: always
image: dpage/pgadmin4:latest
environment:
PGADMIN_DEFAULT_EMAIL: [email protected]
PGADMIN_DEFAULT_PASSWORD: admin
GUNICORN_THREADS: 4
PGADMIN_LISTEN_PORT: 9000
volumes:
- ./utility/pgadmin4-servers.json:/pgadmin4/servers.json
depends_on:
- postgresql
ports:
- "9000:9000"
app:
build: .
environment:
POSTGRES_DB: pgdb
POSTGRES_USER: pguser
POSTGRES_PASSWORD: pgpassword
POSTGRES_HOST: postgresql
volumes:
- .:/code
ports:
- "127.0.0.1:8000:8000"
- "5555:5555"
depends_on:
- postgresql
- pgadmin
Я пробовал использовать следующие комбинации для (приложения) ports
, как предлагается здесь:
app:
...
ports:
- "8000"
- "8000:8000"
- "127.0.0.1:8000:8000"
но я все еще вижу This site can’t be reached 127.0.0.1 refused to connect.
при попытке доступа к сайту.
Я уверен, что это проблема переадресации портов, и что мой сервер правильно работает в django, потому что я могу запустить подключение докера к контейнеру и свернуть URL-адрес с ожидаемым ответом.
Что я делаю неправильно?
как вы запускаете свое приложение django внутри докера? Также вам нужно проверить журналы
Если вы используете докер внутри виртуальной машины, вам необходимо получить доступ к вашему приложению через IP-адрес виртуальной машины и не используя localhost или 127.0.0.1. Попробуйте получить IP виртуальной машины. Также укажите, на какой платформе/среде вы установили и запустили докер.
Я запускал свое приложение с помощью команды:
docker-compose run app python3 manage.py runserver 0.0.0.0:8000
С docker-compose вам нужно использовать аргумент --service-ports
, чтобы:
Run command with the service's ports enabled and mapped to the host.
Таким образом, моя последняя команда выглядела так:
docker-compose run --service-ports app python3 manage.py runserver 0.0.0.0:8000
Документацию по run
можно найти здесь
Можете показать фрагмент вашего приложения, которое слушает порт (8000? 5555?)?