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

У меня есть простой веб-сервер на основе Python, работающий в контейнере, настроенном с помощью Docker Compose, который предоставляет порт 8080.

Когда я составляю сервисы, он сообщает, что порты открыты, но порт не доступен извне.

На что мне следует обратить внимание при диагностике дальше?

Вот типичный пробег

      ➜  demo04 sudo docker-compose up -d
Recreating leagueweb_database ... done
Recreating leagueweb_server   ... done

Веб-сервер Python (с использованием CherryPy) сообщает, что он запустился нормально и открыл порт 8080.

      leagueweb_server | [25/Jan/2022:11:27:21] ENGINE Serving on http://127.0.0.1:8080

Докер сообщает, что перенаправляет порт 8080.

      ➜  demo04 sudo docker-compose ps
       Name                     Command                  State                              Ports
------------------------------------------------------------------------------------------------------------------------
leagueweb_database   /entrypoint.sh mysqld            Up (healthy)   0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp
leagueweb_server     ./wait-for-it.sh database: ...   Up             0.0.0.0:8080->8080/tcp,:::8080->8080/tcp

Тестируя это с удаленного компьютера, я вижу, что хотя порт 3306 открыт извне, порт 8080 — нет.

      PS C:> Test-NetConnection 192.168.1.132 -Port 3306
RemoteAddress    : 192.168.1.132
RemotePort       : 3306
TcpTestSucceeded : True

PS C:> Test-NetConnection 192.168.1.132 -Port 8080
WARNING: TCP connect to (192.168.1.132 : 8080) failed

Брандмауэр выключен

      ➜  demo04 sudo ufw status
Status: inactive

Это файл компоновки докера

      version: '3'
services:

    leagueweb:
        # Install Python and required libraries with a Dockerfile
        build:
            context: .
            dockerfile: leagueweb.dockerfile
            
        restart: unless-stopped
        
        container_name: leagueweb_server
        
        # Don't start up until the database is started
        depends_on:
            - database
        
        # Expose HTTP port 
        ports:
            - "8080:8080"

        # Mount the leagueweb code and resources
        volumes:
            - "/home/testuser/demo04/code:/leagueweb"
 
        # Start the server only once the database is running
        command: ["./wait-for-it.sh", "database:3306", "--", "python", "-u", "/leagueweb/leagueweb.py"]
        

    database:
        # Use MySQL 5.7 as the database
        image: mysql/mysql-server:5.7
        
        restart: unless-stopped
        
        container_name: leagueweb_database

        # Set environment variables to set initial database set-up
        environment:
            - "MYSQL_ROOT_PASSWORD=root"
            - "MYSQL_USER=leagueweb"
            - "MYSQL_PASSWORD=********"
            - "MYSQL_DATABASE=leagueweb01"
            
        # Uncomment to expose the MySQL database externally on port 3306 for 
        # testing 
        ports:
            - "3306:3306"

        # Mount init.sql file to automatically run and create tables for us.
        # everything in docker-entrypoint-initdb.d folder is executed as 
        # soon as container is up and running.
        volumes:
            - "/home/testuser/demo04/db:/docker-entrypoint-initdb.d"

1 ответ

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

      ENGINE Serving on http://127.0.0.1:8080

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

Другие вопросы по тегам