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

Для того чтобы замапить одинаковые порты из разных проектов, запущенных в контейнерах на 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.