Связь между несколькими хостами nginx в docker-compose

У меня есть docker-compose вот так:

version: "3"

networks:
  LEMP:

services:
  nginx:
    image: nginx:latest
    ports:
      - "8080:80"
      - "80:80"
      - "443:443"
      - "3333:3333"
    volumes:
      - /var/www:/var/www
      - ./nginx-conf/server1.local.conf:/etc/nginx/conf.d/server1.local.conf
      - ./nginx-conf/server2.local.conf:/etc/nginx/conf.d/server2.local.conf
    depends_on:
      - php
    networks:
      - LEMP
    extra_hosts:
      - "server1.local:127.0.0.1"
      - "server2.local:127.0.0.1"
  php:
    build: ./php
    restart: always
    volumes:
      - /var/www:/var/www
    ports:
      - "9000:9000"
    networks:
      - LEMP
  mysql:
    image: mysql:5.7
    restart: always
    ports:
      - "3306:3306"
    depends_on:
      - nginx
    environment:
      - MYSQL_ROOT_PASSWORD=my_password
    volumes:
      - db:/var/lib/mysql
    networks:
      - LEMP
  redis:
    image: redis:alpine
    restart: always
    ports:
      - "6379:6379"
    networks:
      - LEMP

volumes:
  db:

PHP Dockerfile:

FROM php:7.1-fpm

RUN docker-php-ext-install pdo pdo_mysql

WORKDIR /var/www

Если я пытаюсь получить доступ к server1.local или server2.local из моего браузера / почтальона, он работает нормально, но если я попытаюсь достичь server2.local (REST api) из server1.local, он не сможет его достичь.

Я прочитал это обсуждение, но, конечно, я не могу использовать IP-адрес своего ПК, так как конфигурация будет передана другим коллегам. Я знаю nginx-proxy, но этот последний требует настройки других служб, где находятся проекты, но в моем случае у меня есть только проекты git, хранящиеся в / var / www /, поэтому как мне настроить их, начиная с папки в / var / www? Например, server2.local имеет как php, так и внутренний обратный прокси для локального хоста (localhost: 3333). Должен ли я начать с образа php, установить node.js / pm2, запустить их и так далее? Мне это кажется немного странным.

чего вы пытаетесь достичь с помощью server1 и server2? Если у вас есть 3 узла (nginx, server1, server2), которые должны работать вместе, почему бы вам не разместить все три из них вместе в одной docker-compose, в одной сети, и они будут видеть друг друга по имени службы?

Const 27.06.2018 17:19

Они находятся в одной сети, в одной и той же docker-compose и той же «службе» (nginx), как вы можете видеть в приведенном выше примере. Это просто хосты nginx. server1.local.conf читает server1.local, а server2.local.conf читает server2.local. Если я не могу объяснить себя лучше, посмотрите это обсуждение, у него та же проблема: форумы.docker.com/t/…

Theraloss 27.06.2018 17:39

Судя по тому, что вы опубликовали, они не находятся в одном файле docker-compose, у вас есть отдельные файлы, обрабатывающие php, верно? Я прочитал перечисленное вами обсуждение, и мой вопрос напрямую связан с этой частью: «Вы МОЖЕТЕ упростить это с помощью docker-compose и« именованной »сети для контейнеров…» из процитированного обсуждения. Мне кажется, вы находитесь в таком же положении, как если бы у вас были контейнеры database + api, которые должны общаться => именованные службы, одна и та же сеть, одна и та же docker-compose => они видят друг друга по имени службы ...

Const 27.06.2018 17:56

Он извлек эту часть только из моего docker-compose, простите. Я обновил его полной версией docker-compose.

Theraloss 27.06.2018 18:07

Тогда вы сможете увидеть их по названию службы. Скажем, вместо server1.local вы должны иметь возможность использовать только «php» (предположим, что php - это server1.local).

Const 27.06.2018 18:14

На самом деле server1 и server2 находятся в одном сервисе (nginx / php), если я использую «php» или «nginx», он не сможет их различить.

Theraloss 27.06.2018 18:18

то эта строка вашего вопроса сбивает с толку: but if I try to reach server2.local (REST api) from server1.local, it can't reach it.. У вас есть 4 сервиса (контейнера): nginx, php, mysql, redis. У вас есть server1.local и server2.local. Мой вопрос: какой из этих контейнеров server1.local и server2.local должен разрешить, и из каких контейнеров вы собираетесь нацелить их (все 4, только некоторые?).

Const 27.06.2018 18:27

server1 и server2 находятся в "nginx", поэтому они должны разрешить этот контейнер, и они это делают "извне" (браузер, почтальон), но внутри

Theraloss 28.06.2018 09:33

Вам необходимо использовать псевдонимы, как описано в stackoverflow.com/questions/45750752/…

Tarun Lalwani 28.06.2018 11:03
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
9
236
0

Другие вопросы по теме