4 votes

Le port Docker Compose n'est pas exposé ?

J'ai un simple serveur web basé sur Python fonctionnant dans un conteneur configuré avec docker compose qui expose le port 8080.

Lorsque je docker-compose les services, il signale que les ports sont exposés, mais le port n'est pas exposé à l'extérieur.

Que dois-je envisager de diagnostiquer ensuite ?

Voici un parcours type

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

Le serveur web Python (utilisant CherryPy) signale qu'il a démarré correctement et ouvert le port 8080.

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

Docker signale qu'il transfère le port 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

En testant cela à partir d'un PC distant, je constate que le port 3306 est ouvert en externe, mais que le port 8080 ne l'est pas.

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

Le pare-feu est désactivé

  demo04 sudo ufw status
Status: inactive

Voici le fichier docker compose

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"

6voto

shearn89 Points 3102

Cela semble poser un problème :

ENGINE Serving on http://127.0.0.1:8080

Il semble que vous deviez reconfigurer votre serveur Python pour qu'il écoute sur 0.0.0.0 , pas 127.0.0.1

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X