Folosesc containere Docker pentru a găzdui o aplicație web. Am trei containere principale: MySQL, flask și Nginx. Primele două funcționează conform așteptărilor, iar cea din urmă pare să funcționeze bine, deoarece nu este afișată nicio eroare în pornirea docker-compose.
Ieșire de inițializare a containerului Nginx:
nginx | /docker-entrypoint.sh: /docker-entrypoint.d/ nu este gol, va încerca să efectueze configurarea
nginx | /docker-entrypoint.sh: Căutăm scripturi shell în /docker-entrypoint.d/
nginx | /docker-entrypoint.sh: Lansarea /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
nginx | 10-listen-on-ipv6-by-default.sh: info: /etc/nginx/conf.d/default.conf nu este un fișier sau nu există
nginx | /docker-entrypoint.sh: Lansarea /docker-entrypoint.d/20-envsubst-on-templates.sh
nginx | /docker-entrypoint.sh: Lansarea /docker-entrypoint.d/30-tune-worker-processes.sh
nginx | /docker-entrypoint.sh: Configurare finalizată; gata de pornire
nginx | 2022/04/07 13:09:13 [notificare] 1#1: folosind metoda evenimentului „epoll”
nginx | 2022/04/07 13:09:13 [notificare] 1#1: nginx/1.21.6
nginx | 2022/04/07 13:09:13 [notă] 1#1: construit de gcc 10.2.1 20210110 (Debian 10.2.1-6)
nginx | 2022/04/07 13:09:13 [notificare] 1#1: OS: Linux 4.19.130-boot2docker
nginx | 2022/04/07 13:09:13 [notificare] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
nginx | 2022/04/07 13:09:13 [notificare] 1#1: începeți procesele lucrătorilor
nginx | 2022/04/07 13:09:13 [notificare] 1#1: începe procesul lucrătorului 21
Nginx dockerfile
# Dockerfile-nginx
DE LA nginx:latest
# Nginx va asculta pe acest port
# EXPUNERE 80
# Eliminați fișierul de configurare implicit care
# /etc/nginx/nginx.conf include
RUN rm /etc/nginx/conf.d/default.conf
# Copiem fișierul cerințelor pentru a instala
# Dependențe Python
COPIEAZĂ nginx.conf /etc/nginx/conf.d/
Containere după desfășurare și porturile lor respective:
CONTAINER ID IMAGINE COMANDA CREAȚĂ STAREA PORTURI NUMELE
bffffcfe2f70 sc_server_nginx "/docker-entrypoint.â¦" Acum 14 secunde Până la 13 secunde 0.0.0.0:80->80/tcp nginx
a73d958c1407 sc_server_flask "uwsgi app.ini" 9 ore în urmă Up 9 ore 8080/tcp flask
d273db5f80ef mysql:5.7 "docker-entrypoint.sâ¦" acum 21 ore Până la 9 ore (sănătos) 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
Sunt nou pe serverul Nginx, așa că cred că poate fi o eroare de începător. Încerc să redirecționez tot traficul de la portul 80 al mașinii mele gazdă către portul 80 al docker, care redirecționează traficul către containerul WSGI printr-un socket.
Folosesc următoarea configurație Nginx (banuiesc nimic aproape de fantezie):
Server {
asculta 80;
Locație / {
include uwsgi_params;
uwsgi_pass balon:8080;
}
}
După cum puteți vedea, serverul ascultă la portul 80 și redirecționează tot traficul prin socket uwsgi_pass balon:8080; la containerul WSGI care găzduiește aplicația.
Cu toate acestea, ori de câte ori introduc 127.0.0.1:80 sau 0.0.0.0:80 în browserul meu, conexiunea este refuzată. Nu am instalat niciun firewall, așa că bănuiesc că nu există nicio problemă cu portul 80 defect.
Acesta este fișierul meu de configurare app.ini, în care sunt indicați parametrii de inițializare și implementare:
[uwsgi]
wsgi-file = wsgi.py
; Acesta este numele variabilei
; în scenariul nostru care va fi numit
callable = app
; Folosim portul 8080 pe care îl vom folosi
; apoi expuneți pe Dockerfile
priză = :8080
; Setați uWSGI pentru a porni 4 lucrători
procese = 4
fire = 2
maestru = adevărat
chmod-socket = 660
vid = adevărat
die-on-term = adevărat
În plus, includ și docker-compose.yml (presupun că poate fi util):
docker-compose.yml
Servicii:
balon:
construi: ./balon
container_name: balon
reporniți: întotdeauna
mediu inconjurator:
- APP_NAME=MyFlaskApp
- YOURAPPLICATION_SETTINGS=docker_config.py
expune:
- 8080
depinde de:
mysql:
stare: service_sănătos
mysql:
imagine: mysql:5.7
container_name: mysql
porturi:
- „3306:3306”
mediu inconjurator:
MYSQL_ROOT_PASSWORD:
MYSQL_DATABASE:
MYSQL_USER:
MYSQL_PASSWORD:
volume:
- ./db/init.sql:/data/application/init.sql
control medical:
test: mysql -u -p --database -e "afișați tabelele;"
interval: 3s
reîncercări: 5
perioada_început: 30s
nginx:
build: ./nginx
container_name: nginx
reporniți: întotdeauna
depinde de:
- mysql
- balon
porturi:
- „80:80”
Poate cineva să ajute?
Actualizați
Am folosit Wireshark pentru a scana interfața de loopback pentru a vedea răspunsul serverului la 0.0.0.0:80 (bănuiesc că ar putea fi o problemă cu portul 80) și primesc următoarea sarcină utilă:
