Рейтинг:2

Порт Docker Compose не открыт?

флаг vn

У меня есть простой веб-сервер на основе 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"
Рейтинг:3
флаг cn

Это похоже на проблему:

ДВИГАТЕЛЬ Обслуживание на http://127.0.0.1:8080

Похоже, вам нужно перенастроить сервер Python для прослушивания 0.0.0.0, нет 127.0.0.1

evoelise avatar
флаг vn
Спасибо. Не могу поверить, что я этого не видел - меня это пугало. Похоже, я слишком сосредоточился на мысли, что это проблема с контейнером.
флаг cn
Бывает со всеми нами!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.