Я использую контейнеры докеров для размещения веб-приложения. У меня есть три основных контейнера: MySQL, flask и Nginx. Первые два работают так, как ожидалось, а последний работает нормально, так как при запуске docker-compose не отображается ошибка.
Вывод инициализации контейнера Nginx:
нгинкс | /docker-entrypoint.sh: /docker-entrypoint.d/ не пустой, попытается выполнить настройку
нгинкс | /docker-entrypoint.sh: поиск сценариев оболочки в /docker-entrypoint.d/
нгинкс | /docker-entrypoint.sh: запуск /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
нгинкс | 10-listen-on-ipv6-by-default.sh: информация: /etc/nginx/conf.d/default.conf не является файлом или не существует
нгинкс | /docker-entrypoint.sh: запуск /docker-entrypoint.d/20-envsubst-on-templates.sh
нгинкс | /docker-entrypoint.sh: запуск /docker-entrypoint.d/30-tune-worker-processes.sh
нгинкс | /docker-entrypoint.sh: настройка завершена; готов к запуску
нгинкс | 07.04.2022 13:09:13 [уведомление] 1#1: использование метода события "epoll"
нгинкс | 07.04.2022 13:09:13 [уведомление] 1#1: nginx/1.21.6
нгинкс | 07.04.2022 13:09:13 [уведомление] 1#1: построено gcc 10.2.1 20210110 (Debian 10.2.1-6)
нгинкс | 07.04.2022 13:09:13 [уведомление] 1#1: ОС: Linux 4.19.130-boot2docker
нгинкс | 07.04.2022 13:09:13 [уведомление] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
нгинкс | 07.04.2022, 13:09:13 [уведомление] 1#1: запустить рабочие процессы
нгинкс | 07.04.2022 13:09:13 [уведомление] 1#1: запустить рабочий процесс 21
Докерфайл Nginx
# Dockerfile-nginx
ОТ nginx: последняя
# Nginx будет прослушивать этот порт
# ЭКСПОЗИЦИЯ 80
# Удалите файл конфигурации по умолчанию, который
# /etc/nginx/nginx.conf включает
ЗАПУСК rm /etc/nginx/conf.d/default.conf
# Копируем файл требований для установки
# Зависимости Python
скопируйте nginx.conf /etc/nginx/conf.d/
Контейнеры после развертывания и соответствующие им порты:
ИДЕНТИФИКАТОР КОНТЕЙНЕРА ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНА СТАТУС ИМЕНА ПОРТОВ
bffffcfe2f70 sc_server_nginx "/docker-entrypoint.â¦" 14 секунд назад Up 13 секунд 0.0.0.0:80->80/tcp nginx
a73d958c1407 sc_server_flask "uwsgi app.ini" 9 часов назад Up 9 часов 8080/tcp flask
d273db5f80ef mysql:5.7 "docker-entrypoint.s¦" 21 час назад Up 9 часов (исправен) 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
Я новичок на сервере Nginx, поэтому я думаю, что это может быть ошибка новичка. Я пытаюсь перенаправить весь трафик с 80-го порта моей хост-машины на 80-й докер, который перенаправляет трафик в контейнер WSGI через сокет.
Я использую следующую конфигурацию Nginx (я думаю, ничего особенного):
сервер {
слушать 80;
место расположения / {
включить uwsgi_params;
колба uwsgi_pass:8080;
}
}
Как видите, сервер слушает порт 80 и перенаправляет весь трафик через сокет. колба uwsgi_pass:8080; в контейнер WSGI, в котором размещено приложение.
Однако всякий раз, когда я набираю 127.0.0.1:80 или 0.0.0.0:80 в своем браузере, в соединении отказывается. У меня нет развернутого брандмауэра, поэтому я думаю, что нет проблем с отключенным портом 80.
Это мой конфигурационный файл app.ini, в котором указаны параметры инициализации и развертывания:
[увсги]
wsgi-файл = wsgi.py
; Это имя переменной
; в нашем скрипте, который будет называться
вызываемый = приложение
; Мы используем порт 8080, который мы будем
; затем выставить на наш Dockerfile
сокет = :8080
; Настройте uWSGI для запуска 4 рабочих процессов.
процессы = 4
темы = 2
мастер = правда
chmod-сокет = 660
вакуум = правда
умирать в срок = правда
Кроме того, я также включаю docker-compose.yml (думаю, это может быть полезно):
докер-compose.yml
Сервисы:
колба:
сборка: ./фласк
имя_контейнера: колба
перезапуск: всегда
среда:
- APP_NAME=MyFlaskApp
- YOURAPPLICATION_SETTINGS=docker_config.py
разоблачать:
- 8080
зависит от:
MySQL:
состояние: service_healthy
MySQL:
изображение: MySQL: 5.7
имя_контейнера: mysql
порты:
- "3306:3306"
среда:
MYSQL_ROOT_ПАРОЛЬ:
MYSQL_DATABASE:
MYSQL_USER:
MYSQL_ПАРОЛЬ:
тома:
- ./db/init.sql:/data/application/init.sql
проверка состояния здоровья:
тест: mysql -u -p --database -e "показать таблицы;"
интервал: 3 с
повторы: 5
начальный_период: 30 сек.
нгинкс:
сборка: ./nginx
имя_контейнера: nginx
перезапуск: всегда
зависит от:
- mysql
- колба
порты:
- "80:80"
Кто-нибудь может помочь?
Обновлять
Я использовал Wireshark для сканирования петлевого интерфейса, чтобы увидеть ответ сервера на 0.0.0.0:80 (я подозреваю, что могут быть проблемы с портом 80), и я получаю следующую полезную нагрузку:
