Как замапить одинаковые порты из разных проектов запущенных в контейнерах на localhost?

Для того чтобы замапить одинаковые порты из разных проектов, запущенных в контейнерах на localhost, нужно использовать функциональность Docker-сетей и проксирование портов.

  1. Создайте Docker-сеть:
docker network create mynetwork
  1. Запустите контейнеры для каждого проекта, привязав их к созданной сети:
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.

  1. Для проксирования портов можно использовать инструменты, такие как 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.