подключить контейнер UWSGI к контейнеру NGINX [Docker] после развертывания контейнеров в репозиторий AWS

Развертываю два контейнера uwsgi и nginx в репозиторий AWS ECS. Я использую fargate для развертывания и настройки контейнеров, но получаю ошибку в соединениях и обмене данными между контейнерами.

error:No host not found in upstream "flask_app" in /etc/nginx/conf.d/nginx.conf.

Docker создает файл yml.

version: "3"

services:
  db:
    container_name: db
    image: postgres
    restart: always
    environment:
      POSTGRES_DB: XXXXX
      POSTGRES_USER: XXXX
      POSTGRES_PASSWORD: XXXXX
    ports:
      - "54321:5432"

  flask_app:
    container_name: flask_app
    image: XXXXXXXXXXXXXXX.dkr.ecr.us-east-2.amazonaws.com/YYYYY:flask
    build:
      context: ./
      dockerfile: ./docker/Dockerfile-flask
    volumes:
      - .:/app
    depends_on:
      - db
    ports:
      - 5000:5000
    links:
      - db


  nginx:
    container_name: nginx
    image: XXXXXXXXXXXXXXX.dkr.ecr.us-east-2.amazonaws.com/YYYYY:backend
    env_file:
      - ./docker/users.variables.env
    build:
      context: .
      dockerfile: ./docker/Dockerfile-nginx
    ports:
      - 8080:80
    depends_on:
      - flask_app
    links:
      - flask_app

Nginx (nginx.conf):
server {
    listen 80;
    server_name localhost;    
    root /usr/share/nginx/html;
    location / {
        resolver 169.254.169.253;
        include uwsgi_params;
        proxy_pass https://flask_app:5000/;
        proxy_set_header Host "localhost";
    }
}


UWSGI.ini:
[uwsgi]
protocol = http
; This is the name of our Python file
; minus the file extension
module = start
; This is the name of the variable
; in our script that will be called
callable = app
master = true
; Set uWSGI to start up 5 workers
processes = 5
; We use the port 5000 which we will
; then expose on our Dockerfile
socket = 0.0.0.0:5000
vacuum = true
die-on-term = trueS

Ошибка 2019/08/23 12:27:13 [Emerg] 1 # 1: хост не найден в восходящем «flask_app» в /etc/nginx/conf.d/nginx.conf:8

Удалось ли вам это решить?   —  person Muhwezi Jerald basasa    schedule 19.10.2019

См. также:  Необходимо получать журналы из cloudwatch в aws Lambda каждый день и обрабатывать их (запланированное событие)
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Muhwezi Jerald basasa

    В вашем примере вы полагаетесь на имя контейнера (flask_app), которое установлено в Docker compose для связи с другим контейнером. Это отлично работает для Docker compose в локальной среде, но не в ECS с использованием Fargate.

    Развертывания с использованием Fargate используют сетевой режим awsvpc. Это позволяет этим контейнерам связываться друг с другом через localhost при условии, что они принадлежат одной задаче — см. Документацию AWS: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html

    Если вы пытаетесь настроить sidecar обратного прокси-сервера nginx, эти контейнеры будут принадлежать одной задаче. Я понимаю, что в приведенном ниже примере используется протокол uwsgi, а не http, но он демонстрирует связь через localhost (если вам не нужно использовать http, вы можете легко изменить свою конфигурацию для использования uwsgi). Вот рабочая конфигурация nginx и uwsgi в качестве развертывания Fargate с использованием протокола uwsgi:

    nginx.conf:

    server {
        listen 80;
        server_name localhost 127.0.0.1;
        root /usr/share/nginx/html;
        location / {
            include uwsgi_params;
            uwsgi_pass localhost:5000;
        }
    

    и uwsgi.ini вот так:

    [uwsgi]
    module = wsgi:app
    uid = www-data
    gid = www-data
    master = true
    
    processes = 3
    
    socket=localhost:5000
    vacuum = true
    
    die-on-term = true
    

    (при условии, что вы используете порт 5000, как в вашем примере) Эта конфигурация не будет работать в вашей локальной среде с Docker compose и мостовой сетью — но если вы работаете в Linux, вы можете смоделировать ее, используя хост-сеть — инструкции по настройке локальных тестовых сред можно найти здесь: https://aws.amazon.com/blogs/compute/a-guide-to-locally-testing-containers-with-amazon-ecs-local-endpoints-and-docker-compose/

    Надеюсь, это поможет решить проблему.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: