Порт 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