У меня есть 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, запустить их и так далее? Мне это кажется немного странным.
Они находятся в одной сети, в одной и той же docker-compose и той же «службе» (nginx), как вы можете видеть в приведенном выше примере. Это просто хосты nginx. server1.local.conf читает server1.local, а server2.local.conf читает server2.local. Если я не могу объяснить себя лучше, посмотрите это обсуждение, у него та же проблема: форумы.docker.com/t/…
Судя по тому, что вы опубликовали, они не находятся в одном файле docker-compose, у вас есть отдельные файлы, обрабатывающие php, верно? Я прочитал перечисленное вами обсуждение, и мой вопрос напрямую связан с этой частью: «Вы МОЖЕТЕ упростить это с помощью docker-compose и« именованной »сети для контейнеров…» из процитированного обсуждения. Мне кажется, вы находитесь в таком же положении, как если бы у вас были контейнеры database + api, которые должны общаться => именованные службы, одна и та же сеть, одна и та же docker-compose => они видят друг друга по имени службы ...
Он извлек эту часть только из моего docker-compose, простите. Я обновил его полной версией docker-compose.
Тогда вы сможете увидеть их по названию службы. Скажем, вместо server1.local вы должны иметь возможность использовать только «php» (предположим, что php - это server1.local).
На самом деле server1 и server2 находятся в одном сервисе (nginx / php), если я использую «php» или «nginx», он не сможет их различить.
то эта строка вашего вопроса сбивает с толку: 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, только некоторые?).
server1 и server2 находятся в "nginx", поэтому они должны разрешить этот контейнер, и они это делают "извне" (браузер, почтальон), но внутри
Вам необходимо использовать псевдонимы, как описано в stackoverflow.com/questions/45750752/…


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