Используйте имена сервисов docker-compose в конфигурации Nginx - PullRequest
0 голосов
/ 22 октября 2019

У меня есть приложение с 4 сервисами. Одним из них является Nginx, который будет действовать как прокси. Я использую docker compose для запуска сервисов. В nginx, когда я указываю путь и где прокси, я хочу иметь возможность использовать имя службы. Это то, что я сделал до сих пор.

version: '3'
services:
  go_app:
    image: go_app
    depends_on: 
      - mysql
    ports: 
      - "8000:8000"

  mysql:
    image: mysql_db
    ports: 
      - "3306:3306"

  flask_app:
    image: flask_app
    ports: 
      - "8080:8080"

  nginx:
    image: nginx_app
    ports: 
      - "80:80"
    depends_on: 
      - mysql
      - flask_app
      - go_app

С помощью вышеизложенного я создаю все сервисы. Все они работают на своих соответствующих портах. Я хочу, чтобы Nginx прослушивал порт 80 и прокси, как определено в конфигурации:

server {
listen 0.0.0.0:80;
server_name localhost;

location / {
  proxy_pass http://${FLASK_APP}:8080/;
  }
}

Вы можете спросить, откуда взялся FLASK_APP. Я указываю это внутри образа докера nginx:

FROM nginx

ENV FLASK_APP=flask_app
RUN rm /etc/nginx/conf.d/default.conf
COPY config/default.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Контейнер Nginx продолжает сбой со следующей ошибкой:

[emerg] 1#1: unknown "flask_app" variable
nginx: [emerg] unknown "flask_app" variable

Как я понимаю, составление докера, flask_app должно разрешиться как flask_appоказание услуг. Что я делаю неправильно / недоразумение?

1 Ответ

0 голосов
/ 22 октября 2019

Проблема в том, что nginx не читает переменные ENV.

см. https://github.com/docker-library/docs/tree/master/nginx#using-environment-variables-in-nginx-configuration

решение: вы можете изменить свой dockerfile для nginx с помощью этого

FROM nginx
ENV FLASK_APP=flask_app
RUN rm /etc/nginx/conf.d/default.conf
COPY default.conf /etc/nginx/conf.d/default.template
EXPOSE 80
CMD ["/bin/bash","-c","envsubst < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"]

команда COPY изменена, чтобы скопировать вашу конфигурацию в качестве шаблона.

последняя строка изменена для выполнения замены с использованием переменных ENV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...