Puncte:2

Portul Docker Compose nu este expus?

drapel vn

Am un server web simplu bazat pe Python care rulează într-un container configurat cu docker compose care expune portul 8080.

Când compun serviciile prin docker, raportează că porturile sunt expuse, dar portul nu este expus extern.

Ce ar trebui să mă uit la diagnosticarea în continuare?

Iată o alergare tipică

â demo04 sudo docker-compose up -d
Recrearea bazei de date leagueweb_data... gata
Recrearea leagueweb_server... gata

Serverul web Python (folosind CherryPy) raportează că a pornit OK și a deschis portul 8080.

leagueweb_server | [25/Jan/2022:11:27:21] ENGINE Se difuzează pe http://127.0.0.1:8080

Docker raportează că redirecționează portul 8080

â demo04 sudo docker-compose ps
       Denumirea Comandă State Ports
--------------------------------------------- --------------------------------------------- --------------------
leagueweb_database /entrypoint.sh mysqld Sus (sănătos) 0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp
leagueweb_server ./wait-for-it.sh baza de date: ... Up 0.0.0.0:8080->8080/tcp,:::8080->8080/tcp

Testând acest lucru de la un computer la distanță, pot vedea că, deși portul 3306 este deschis extern, portul 8080 nu este.

PS C:> Test-NetConnection 192.168.1.132 -Port 3306
Adresă de la distanță: 192.168.1.132
RemotePort: 3306
TcpTestSucceeded : Adevărat

PS C:> Test-NetConnection 192.168.1.132 -Port 8080
AVERTISMENT: Conectarea TCP la (192.168.1.132 : 8080) a eșuat

Firewall-ul este dezactivat

â demo04 sudo ufw status
Stare: inactiv

Acesta este fișierul de scriere docker

versiunea: '3'
Servicii:

    leagueweb:
        # Instalați Python și bibliotecile necesare cu un fișier Docker
        construi:
            context: .
            dockerfile: leagueweb.dockerfile
            
        reporniți: dacă nu este oprit
        
        container_name: leagueweb_server
        
        # Nu porniți până nu pornește baza de date
        depinde de:
            - Bază de date
        
        # Expuneți portul HTTP 
        porturi:
            - „8080:8080”

        # Montați codul și resursele leagueweb
        volume:
            - „/home/testuser/demo04/code:/leagueweb”
 
        # Porniți serverul numai după ce baza de date rulează
        comandă: ["./wait-for-it.sh", "database:3306", "--", "python", "-u", "/leagueweb/leagueweb.py"]
        

    Bază de date:
        # Utilizați MySQL 5.7 ca bază de date
        imagine: mysql/mysql-server:5.7
        
        reporniți: dacă nu este oprit
        
        container_name: leagueweb_database

        # Setați variabilele de mediu pentru a seta configurarea inițială a bazei de date
        mediu inconjurator:
            - „MYSQL_ROOT_PASSWORD=rădăcină”
            - „MYSQL_USER=leagueweb”
            - „MYSQL_PASSWORD=********”
            - „MYSQL_DATABASE=leagueweb01”
            
        # Anulați comentariile pentru a expune baza de date MySQL extern pe portul 3306 pentru 
        # testare 
        porturi:
            - „3306:3306”

        # Montați fișierul init.sql pentru a rula și a crea automat tabele pentru noi.
        # totul din folderul docker-entrypoint-initdb.d este executat ca 
        # imediat ce containerul este în funcțiune.
        volume:
            - „/home/testuser/demo04/db:/docker-entrypoint-initdb.d”
Puncte:3
drapel cn

Aceasta arată ca o problemă:

MOTOR Servire pe http://127.0.0.1:8080

Se pare că trebuie să reconfigurați serverul Python pentru a asculta 0.0.0.0, nu 127.0.0.1

evoelise avatar
drapel vn
Mulțumiri. Nu-mi vine să cred că n-am văzut asta - mă începuse în față. Se pare că m-am concentrat prea mult să mă gândesc că este o problemă cu containerul.
drapel cn
Ni se întâmplă tuturor!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.