У меня есть простой веб-сервер на основе Python, работающий в контейнере, настроенном с помощью docker compose, который предоставляет порт 8080.
Когда я создаю докеры для сервисов, он сообщает, что порты открыты, но порт не отображается извне.
Что я должен смотреть на диагностике дальше?
Вот типичный пробег
➤ demo04 sudo docker-compose up -d
Воссоздание базы данных Leagueweb_Database... готово
Воссоздание лигиweb_server... сделано
Веб-сервер Python (использующий CherryPy) сообщает, что он запущен нормально и открыл порт 8080.
лигаweb_server | [25/янв/2022:11:27:21] ENGINE обслуживает http://127.0.0.1:8080
Docker сообщает, что он перенаправляет порт 8080
➤ demo04 sudo docker-compose ps
Имя порта состояния команды
--------------------------------------------- --------------------------------------------- --------------------
Leagueweb_database /entrypoint.sh mysqld Up (исправен) 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
лигаweb_server ./wait-for-it.sh база данных: ... Up 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
Тестируя это с удаленного ПК, я вижу, что хотя порт 3306 открыт извне, порт 8080 — нет.
PS C:> Test-NetConnection 192.168.1.132 -Порт 3306
Удаленный адрес: 192.168.1.132
Удаленный порт: 3306
TcpTestSucceeded: Истина
PS C:> Test-NetConnection 192.168.1.132-порт 8080
ВНИМАНИЕ: TCP-соединение с (192.168.1.132: 8080) не удалось
Брандмауэр выключен
➢ Статус demo04 sudo ufw
Статус: неактивен
Это файл компоновки докера
версия: '3'
Сервисы:
лигавеб:
# Установите Python и необходимые библиотеки с помощью Dockerfile
строить:
контекст: .
dockerfile: лигаweb.dockerfile
перезапуск: если не остановлен
container_name: лигаweb_server
# Не запускать, пока не запустится база данных
зависит от:
- база данных
# Выставляем HTTP-порт
порты:
- "8080:8080"
# Смонтировать код и ресурсы лигиweb
тома:
- "/home/testuser/demo04/code:/leagueweb"
# Запускать сервер только после запуска базы данных
команда: ["./wait-for-it.sh", "база данных: 3306", "--", "python", "-u", "/leagueweb/leagueweb.py"]
база данных:
# Использовать MySQL 5.7 в качестве базы данных
изображение: mysql/mysql-сервер: 5.7
перезапуск: если не остановлен
container_name: лигаweb_database
# Установите переменные среды, чтобы установить первоначальную настройку базы данных
среда:
- "MYSQL_ROOT_PASSWORD=корень"
- "MYSQL_USER=leagueweb"
- "MYSQL_PASSWORD = *********"
- "MYSQL_DATABASE=leagueweb01"
# Раскомментируйте, чтобы предоставить доступ к базе данных MySQL извне через порт 3306 для
# тестирование
порты:
- "3306:3306"
# Подключить файл init.sql для автоматического запуска и создания таблиц.
# все в папке docker-entrypoint-initdb.d выполняется как
# как только контейнер заработает.
тома:
- "/home/testuser/demo04/db:/docker-entrypoint-initdb.d"