#docker #docker-compose #nginx-reverse-proxy #nginx-config
Вопрос:
У меня возникли проблемы с развертыванием простого приложения Flask за обратным прокси-сервером Nginx. Это приложение находится по адресу https://docs.docker.com/compose/gettingstarted/
Я пытаюсь заставить приложение отображаться в subdomain.example.com/flask
, но с текущей конфигурацией это не работает. Чего мне не хватает?
Теперь моя docker-compose.yml
внешность выглядит так:
version: '3'
services:
nginx:
container_name: nginx
build:
context: ./nginx
volumes:
- ./config/:/etc/nginx/
- ./ssl-cert/:/etc/ssl/private/
depends_on:
- web
ports:
- 80:80
web:
build:
context: ./composetest
expose:
- 5000
redis:
image: "redis:alpine"
И вот мой Nginx default.conf
:
server {
listen 80;
server_name subdomain.example.com;
location /flask{
proxy_pass http://web:5000;
}
}
Когда я это делаю docker-compose up --build
, я не получаю никаких ошибок ни от контейнера Nginx, ни от других (очевидно, игнорируя ошибки, связанные с подготовкой к производству).
Вот что я вижу, когда выполняю вышеупомянутую команду:
redis_1 | 1:C 16 May 2021 14:08:42.327 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 16 May 2021 14:08:42.335 # Redis version=6.2.3, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1 | 1:C 16 May 2021 14:08:42.335 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis_1 | 1:M 16 May 2021 14:08:42.336 * monotonic clock: POSIX clock_gettime
redis_1 | 1:M 16 May 2021 14:08:42.337 * Running mode=standalone, port=6379.
redis_1 | 1:M 16 May 2021 14:08:42.337 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
redis_1 | 1:M 16 May 2021 14:08:42.337 # Server initialized
redis_1 | 1:M 16 May 2021 14:08:42.337 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
redis_1 | 1:M 16 May 2021 14:08:42.338 * Ready to accept connections
web_1 | * Serving Flask app 'app.py' (lazy loading)
web_1 | * Environment: production
web_1 | WARNING: This is a development server. Do not use it in a production deployment.
web_1 | Use a production WSGI server instead.
web_1 | * Debug mode: off
web_1 | * Running on all addresses.
web_1 | WARNING: This is a development server. Do not use it in a production deployment.
web_1 | * Running on http://192.168.112.4:5000/ (Press CTRL C to quit)
Ответ №1:
Я думаю, что все в порядке, вы открываете порт 5000 из своего веб-контейнера и указываете порт 80 для nginx
контейнера
возможно, вам следует указать порт 80 на вашем локальном компьютере.
просто добавив в разделе depends_on: перестроить тест, и он должен работать нормально
ports:
- "80:80"
Добавьте поддомен: subdomain.example.com
также на вашем локальном компьютере в разделе /etc/hosts
,
если вы используете ubuntu
debian
компьютер. добавив хост с помощью любого текстового редактора vim
nano
…
127.0.0.1 subdomain.example.com
Сохраняйте и обслуживайте из своего браузера.
Комментарии:
1. Извините, у меня были порты,
docker-compose.yml
но я не скопировал их в сообщении. Ваш ответ все равно помог мне, потому что я забыл переслать порт 80. Теперь я чувствую себя идиотом.
Ответ №2:
Вам нужна ports
директива для службы nginx. Даже если порты по умолчанию отображаются изображением, они автоматически не привязываются к хосту, как в ports
.
services:
nginx:
container_name: nginx
build:
context: ./nginx
volumes:
- ./config/:/etc/nginx/
- ./ssl-cert/:/etc/ssl/private/
depends_on:
- web
ports:
- "80:80"
После этого вы сможете получить доступ к nginx по адресу http://localhost