У меня есть несколько доменов с общим публичным IP-адресом (экземпляр EC2).Моя установка выглядит следующим образом:
/home/ubuntu
содержит docker-compose.yml
:
version: '3'
services:
nginx-proxy:
image: "jwilder/nginx-proxy"
container_name: nginx-proxy
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
ports:
- "80:80"
restart: "always"
Это создает сеть с именем ubuntu_default
, которая позволяет другим экземплярам составных файлов присоединяться.Образ nginx-proxy
создает обратные прокси-серверы для этих других экземпляров compose, чтобы вы могли посетить example.com и перенаправить на соответствующий пользовательский интерфейс в соответствующем экземпляре compose.
/home/ubuntu/example.com/project-1
содержит docker-compose.yml
, например:
version: '3'
services:
db:
build: "./db" # mongo
volumes:
- "./data:/data/db"
restart: "always"
api:
build: "./api" # a node backend
ports:
- "9005:9005"
restart: "always"
depends_on:
- db
ui:
build: "./ui" # a react front end
ports:
- "8005:8005"
restart: "always"
environment:
- VIRTUAL_HOST=project-1.example.com # this tells nginx-proxy which domain to proxy
- VIRTUAL_PORT=8005 # this tells nginx-proxy which port to proxy
networks:
default:
external:
name: ubuntu_default
/home/ubuntu/testing.com/project-2
содержит docker-compose.yml
как:
version: '3'
services:
db:
build: "./db" # postgres
volumes:
- "./data:/var/lib/postgresql/data"
restart: "always"
api:
build: "./api" # a python backend
ports:
- "9000:9000"
restart: "always"
depends_on:
- db
ui:
build: "./ui" # a react front end
ports:
- "8000:8000"
restart: "always"
environment:
- VIRTUAL_HOST=testing.com,www.testing.com # tells nginx-proxy which domains to proxy
- VIRTUAL_PORT=8000 # tells nginx-proxy which port to proxy
networks:
default:
external:
name: ubuntu_default
Итак, в основном:
- project-1.example.com: 80 форвардовна пользовательский интерфейс, запущенный: 8005
- project-1.example.com: 80 / api, пересылаемый API, работающий на: 9005
- testing.com, перенаправляющий на пользовательский интерфейс, работающий на: 8000
- testing.com / api перенаправляет на API, работающий на: 9000
... и все это прекрасно работает, пока я запускаю только по одному за раз.В тот момент, когда я запускаю оба экземпляра Compose, URL-адреса / api начинают конфликтовать.Я могу сесть на один из них и обновить несколько раз, а иногда я увижу один для example.com/api, а иногда я увижу один для testing.com/api.
Понятия не имею, чтопроисходит в этой точке.Может быть, предпосылка, против которой я работаю, в корне неверна, но кажется, что она предназначена для использования Docker / Compose.Я открыт для предложений сделать то же самое в противном случае.