Tôi có một máy chủ web dựa trên Python đơn giản đang chạy trong một vùng chứa được thiết lập với trình soạn thảo docker hiển thị cổng 8080.
Khi tôi soạn các dịch vụ docker, nó báo cáo các cổng bị lộ nhưng cổng không bị lộ ra bên ngoài.
Tôi nên xem chẩn đoán gì tiếp theo?
Đây là một hoạt động điển hình
â demo04 Sudo docker-compose up -d
Tạo lại leagueweb_database... xong
Tạo lại leagueweb_server... xong
Máy chủ web Python (sử dụng CherryPy) báo cáo rằng nó đã khởi động bình thường và đã mở cổng 8080.
giải đấuweb_server | [25/Jan/2022:11:27:21] ENGINE Phục vụ trên http://127.0.0.1:8080
Docker báo cáo rằng nó đang chuyển tiếp cổng 8080
â demo04 sudo docker-compose ps
Tên Lệnh Trạng thái Cổng
--------------------------------------------- --------------------------------------------- --------------------
leagueweb_database /entrypoint.sh mysqld Lên (khỏe mạnh) 0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp
leagueweb_server ./wait-for-it.sh cơ sở dữ liệu: ... Lên 0.0.0.0:8080->8080/tcp,:::8080->8080/tcp
Kiểm tra điều này từ một PC từ xa, tôi có thể thấy rằng mặc dù cổng 3306 được mở từ bên ngoài nhưng cổng 8080 thì không.
PS C:> Test-NetConnection 192.168.1.132 -Port 3306
Địa chỉ từ xa : 192.168.1.132
Cổng từ xa: 3306
TcpTestSucceeded : Đúng
PS C:> Test-NetConnection 192.168.1.132 -Port 8080
CẢNH BÁO: Kết nối TCP với (192.168.1.132: 8080) không thành công
Tường lửa đã tắt
demo04 trạng thái sudo ufw
Tình trạng: không hoạt động
Đây là tập tin soạn thảo docker
phiên bản: '3'
dịch vụ:
giải đấu web:
# Cài đặt Python và các thư viện cần thiết với Dockerfile
xây dựng:
bối cảnh: .
dockerfile: leagueweb.dockerfile
khởi động lại: trừ khi dừng
container_name: leagueweb_server
# Không khởi động cho đến khi cơ sở dữ liệu được khởi động
phụ thuộc:
- cơ sở dữ liệu
# Hiển thị cổng HTTP
cổng:
- "8080:8080"
# Gắn mã và tài nguyên web giải đấu
khối lượng:
- "/home/testuser/demo04/code:/leagueweb"
# Chỉ khởi động máy chủ khi cơ sở dữ liệu đang chạy
lệnh: ["./wait-for-it.sh", "database:3306", "--", "python", "-u", "/leagueweb/leagueweb.py"]
cơ sở dữ liệu:
# Sử dụng MySQL 5.7 làm cơ sở dữ liệu
hình ảnh: mysql/mysql-server:5.7
khởi động lại: trừ khi dừng
container_name: leagueweb_database
# Đặt biến môi trường để thiết lập cơ sở dữ liệu ban đầu
môi trường:
- "MYSQL_ROOT_PASSWORD=gốc"
- "MYSQL_USER=leagueweb"
- "MYSQL_PASSWORD=*********"
- "MYSQL_DATABASE=leagueweb01"
# Bỏ ghi chú để hiển thị cơ sở dữ liệu MySQL bên ngoài trên cổng 3306 cho
# thử nghiệm
cổng:
- "3306:3306"
# Mount file init.sql để tự động chạy và tạo bảng cho chúng ta.
# mọi thứ trong thư mục docker-entrypoint-initdb.d được thực thi như
# ngay sau khi vùng chứa được thiết lập và chạy.
khối lượng:
- "/home/testuser/demo04/db:/docker-entrypoint-initdb.d"