Для того чтобы замапить одинаковые порты из разных проектов, запущенных в контейнерах на localhost, нужно использовать функциональность Docker-сетей и проксирование портов.
1. Создайте Docker-сеть:
docker network create mynetwork
2. Запустите контейнеры для каждого проекта, привязав их к созданной сети:
docker run -d --network=mynetwork --name project1 -p 8000:8000 project1:latest docker run -d --network=mynetwork --name project2 -p 8000:8000 project2:latest
В примере выше контейнеры проектов project1 и project2 привязаны к сети mynetwork и мапят одинаковый порт 8000 на порт localhost 8000.
3. Для проксирования портов можно использовать инструменты, такие как nginx или HAProxy. Например, установите и настройте nginx:
- Установите nginx:
sudo apt install nginx
- Откройте файл конфигурации nginx (/etc/nginx/nginx.conf) и добавьте следующую конфигурацию:
http { ... server { listen 80; location /project1 { proxy_pass http://project1:8000; } location /project2 { proxy_pass http://project2:8000; } ... } ... }
В данной конфигурации мы создаем две location секции - одну для каждого проекта. Внутри каждой секции мы проксируем запросы с помощью директивы proxy_pass, указывая адрес контейнера и соответствующий порт.
- Перезапустите nginx:
sudo systemctl restart nginx
Теперь, при обращении к localhost/project1 будут проксироваться запросы на контейнер project1, слушающий порт 8000, а при обращении к localhost/project2 - на контейнер project2, слушающий тот же порт.
Вы должны иметь в виду, что в данной конфигурации проксируются только HTTP запросы. Если ваш проект использует другой протокол, вам нужно будет настроить проксирование соответствующим образом.
Таким образом, вы создали Docker-сеть, привязали к ней контейнеры с проектами, и настроили проксирование портов с помощью nginx. Теперь вы можете обращаться к каждому проекту по одинаковому порту на localhost, используя специальный путь в URL.