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”