Используйте expose
вместо
одно приложение на порту 5000
другое на порту 5001
docker-compose:
приложение 1:
expose:
- 5000
приложение 2:
expose:
- 5001
убедитесь, что вы запускаете приложенияс ip = 0.0.0.0
Если вы хотите получить доступ к приложению 2 с хост-машины, перенаправьте порты
app2:
expose:
- 5001
ports:
- 80:5001
Объяснение:
Expose показывает только порты в мире докеров.Таким образом, если вы выставите контейнер A на порт 8888, все другие контейнеры смогут получить доступ к этому контейнеру в этом порту.Но вы никогда не получите доступ к нему с хост-компьютера.
Стандартная процедура заключается в том, что вы перенаправляете только один порт, то есть 80
из соображений безопасности, а остальная часть трафика недоступна из внешнего мира
Также измените dockerfile.Вам не нужны жестко закодированные порты
Редактировать:
Также избавьтесь от этого
volumes:
- '.:/app'
Это может вызвать дополнительныенеполадки
Рабочий пример: - работает, но предоставленное приложение содержит ошибки
docker-compose.yml
version: '3.5'
services:
collector:
container_name: collector
build:
context: collector/.
ports:
- '80:5555'
expose:
- '5555'
calculator:
container_name: calculator
build:
context: calculator/.
depends_on:
- collector
expose:
- 6666
ports:
- '81:6666'
volumes:
- './calculator:/app'
Youможет получить доступ к обеим конечным точкам через порты 80 и 81. Связь между обеими конечными точками скрыта от нас, и это на 5555 и 6666. Если вы закроете 81 (или 80), вы можете получить доступ к другой конечной точке только как «прокси»