Tôi đang sử dụng bộ chứa docker để lưu trữ ứng dụng web. Tôi có ba vùng chứa chính: MySQL, bình và Nginx. Hai cái đầu tiên hoạt động như mong đợi và cái sau dường như hoạt động tốt vì không có lỗi nào được hiển thị trong quá trình khởi động docker-compose.
Đầu ra khởi tạo vùng chứa Nginx:
nginx | /docker-entrypoint.sh: /docker-entrypoint.d/ không trống, sẽ cố gắng thực hiện cấu hình
nginx | /docker-entrypoint.sh: Tìm kiếm shell script trong /docker-entrypoint.d/
nginx | /docker-entrypoint.sh: Khởi chạy /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
nginx | 10-listen-on-ipv6-by-default.sh: thông tin: /etc/nginx/conf.d/default.conf không phải là tệp hoặc không tồn tại
nginx | /docker-entrypoint.sh: Khởi chạy /docker-entrypoint.d/20-envsubst-on-templates.sh
nginx | /docker-entrypoint.sh: Khởi chạy /docker-entrypoint.d/30-tune-worker-processes.sh
nginx | /docker-entrypoint.sh: Cấu hình hoàn tất; sẵn sàng khởi động
nginx | 2022/04/07 13:09:13 [thông báo] 1#1: sử dụng phương thức sự kiện "epoll"
nginx | 2022/04/07 13:09:13 [thông báo] 1#1: nginx/1.21.6
nginx | 2022/04/07 13:09:13 [thông báo] 1#1: được xây dựng bởi gcc 10.2.1 20210110 (Debian 10.2.1-6)
nginx | 2022/04/07 13:09:13 [thông báo] 1#1: Hệ điều hành: Linux 4.19.130-boot2docker
nginx | 2022/04/07 13:09:13 [thông báo] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
nginx | 2022/04/07 13:09:13 [thông báo] 1#1: bắt đầu worker process
nginx | 2022/04/07 13:09:13 [thông báo] 1#1: bắt đầu worker process 21
Nginx dockerfile
# Dockerfile-nginx
TỪ nginx:mới nhất
# Nginx sẽ lắng nghe trên cổng này
# TIẾP XÚC 80
# Xóa tệp cấu hình mặc định
# /etc/nginx/nginx.conf bao gồm
CHẠY rm /etc/nginx/conf.d/default.conf
# Chúng tôi sao chép tệp yêu cầu để cài đặt
# Phụ thuộc Python
SAO CHÉP nginx.conf /etc/nginx/conf.d/
Các container sau khi triển khai và các cổng tương ứng:
ID CONTAINER HÌNH ẢNH LỆNH TẠO TÊN CỔNG TRẠNG THÁI
bffffcfe2f70 sc_server_nginx "/docker-entrypoint.â¦" 14 giây trước Lên 13 giây 0.0.0.0:80->80/tcp nginx
a73d958c1407 sc_server_flask "uwsgi app.ini" 9 giờ trước Lên 9 giờ 8080/tcp bình
d273db5f80ef mysql:5.7 "docker-entrypoint.sâ¦" 21 giờ trước Lên 9 giờ (khỏe mạnh) 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
Tôi mới sử dụng máy chủ Nginx, vì vậy tôi đoán đó có thể là lỗi của người mới. Tôi đang cố chuyển hướng tất cả lưu lượng truy cập từ cổng 80 của máy chủ sang cổng 80 của docker để chuyển hướng lưu lượng truy cập đến bộ chứa WSGI thông qua một ổ cắm.
Tôi đang sử dụng cấu hình Nginx sau (tôi đoán là không có gì lạ mắt):
người phục vụ {
nghe 80;
địa điểm / {
bao gồm uwsgi_params;
uwsgi_pass bình: 8080;
}
}
Như bạn có thể thấy máy chủ lắng nghe ở cổng 80 và chuyển hướng tất cả lưu lượng truy cập qua ổ cắm uwsgi_pass bình: 8080;
vào bộ chứa WSGI đang lưu trữ ứng dụng.
Tuy nhiên, bất cứ khi nào tôi gõ 127.0.0.1:80 hoặc 0.0.0.0:80 trong trình duyệt của mình, kết nối sẽ bị từ chối. Tôi không triển khai tường lửa, vì vậy tôi đoán rằng không có vấn đề gì với việc cổng 80 bị hỏng.
Đây là tệp cấu hình app.ini của tôi, trong đó các tham số khởi tạo và triển khai được chỉ định:
[uwsgi]
tệp wsgi = wsgi.py
; Đây là tên của biến
; trong kịch bản của chúng tôi sẽ được gọi
gọi được = ứng dụng
; Chúng tôi sử dụng cổng 8080 mà chúng tôi sẽ
; sau đó hiển thị trên Dockerfile của chúng tôi
ổ cắm = :8080
; Đặt uWSGI để khởi động 4 công nhân
quy trình = 4
chủ đề = 2
chủ = đúng
ổ cắm chmod = 660
chân không = đúng
die-on-term = true
Ngoài ra, tôi cũng bao gồm docker-compose.yml (tôi đoán nó có thể hữu ích):
docker-compose.yml
dịch vụ:
bình giữ nhiệt:
xây dựng: ./flask
container_name: bình
khởi động lại: luôn luôn
môi trường:
- APP_NAME=MyFlaskApp
- YOURAPPLICATION_SETTINGS=docker_config.py
lộ ra:
- 8080
phụ thuộc:
mysql:
điều kiện: service_healthy
mysql:
hình ảnh: mysql:5.7
container_name: mysql
cổng:
- "3306:3306"
môi trường:
MYSQL_ROOT_PASSWORD:
MYSQL_DATABASE:
MYSQL_USER:
MYSQL_PASSWORD:
khối lượng:
- ./db/init.sql:/data/application/init.sql
kiểm tra sức khỏe:
kiểm tra: mysql -u -p --database -e "hiển thị bảng;"
khoảng thời gian: 3s
thử lại: 5
start_period: 30s
nginx:
xây dựng: ./nginx
container_name: nginx
khởi động lại: luôn luôn
phụ thuộc:
- mysql
- bình giữ nhiệt
cổng:
- "80:80"
Bất cứ ai có thể giúp đỡ?
Cập nhật
Tôi đã sử dụng Wireshark để quét giao diện loopback để xem phản hồi của máy chủ với 0.0.0.0:80 (tôi nghi ngờ có thể có vấn đề với cổng 80) và tôi nhận được tải trọng sau: