NGINX HTTP-запрос к связанному контейнеру - PullRequest
0 голосов
/ 23 ноября 2018

Это мой файл docker-compose, который запускает контейнер NodeJS/PM2 и контейнер React/Nginx на одном хосте.

version: '3'
services:
  nodejs:
    image: nodejs_pm2:1.00
    container_name: NODE_CONTAINER
    ports:
      - "8000:8000"
    build:
      context: ./nodejs
      dockerfile: Dockerfile-nodejs
  react:
    image: react_nginx:1.00
    container_name: REACT_CONTAINER
    ports:
      - "3000:3000"
    build:
      context: ./react-app
      dockerfile: Dockerfile-react
    depends_on:
     - nodejs

Как видите, моя react служба depends_on nodejs.Это должно связать контейнеры, правильно?

Вопрос 1) Предполагая, что это правда, как правильно сделать HTTP-запрос к моему бэкэнду узла?

Вот что япытался сделать с моим конфигурационным файлом nginx:

upstream backend {
    server nodejs:8000
  }

  server {
    listen 3000;

    location ~ ^/api/[0-9a-z]+/$ {
      proxy_pass http://backend/;
      include /etc/nginx/proxy_params;
    }

    location / {
      root /usr/share/nginx/html;
      index index.html index.htm;
      try_files $uri $uri/ /index.html;
    }
  }

Это не работает.Фактически это полностью предотвращает появление внешнего интерфейса.Я пытаюсь сделать что-то вроде axios.get("http://backend/api/*") из моего приложения реакции.Я просмотрел несколько сообщений stackoverflow, и ни один из них, похоже, не работал для меня.

Вопрос 2) Последующий вопрос, какой смысл связывать контейнеры, если два контейнера живут натот же хост, я не могу просто сделать запрос к localhost:port как обычно?

1 Ответ

0 голосов
/ 23 ноября 2018

у вас на самом деле есть 3 вопроса:

Вопрос 0 Это должно связать контейнеры, правильно?

Нет, depends_on определяет зависимость контейнера (например, ждатьконтейнер A должен запускаться перед контейнером B), а не ссылки

Вопрос 1 Как правильно сделать HTTP-запрос к моему бэкэнду моего узла?

Ваши 2 контейнера могут подключитьсядруг с другом, используя свойство container_name. Таким образом, для вашего nginx.config вы должны иметь возможность подключиться к контейнеру nodejs через NODE_CONTAINER:8000

Вопрос 2 * в чем смысл связыванияконтейнеры, если два контейнера живут на одном и том же хосте, я не могу просто сделать запрос к localhost: порт как обычно?

Пожалуйста, обратитесь к этому, он объяснит концепции создания сетей и связывания контейнеров лучше, чем я https://docs.docker.com/compose/networking/

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