Docker Compose: переназначьте порт контейнера, чтобы он был одинаковым внутри сети и на хосте

У меня есть два докеризованных приложения, которые являются частью сети докеров и оба запускаются на порту 8080. Мне нужно, чтобы они оба были выставлены на хост-машине, поэтому я выставляю их на 8080 и 8081 соответственно.

app-1:
  ports:
    - "8080:8080"

app-2:
  ports:
    - "8081:8080"

У меня нет контроля над этими приложениями (я не могу изменить их порты), они являются лишь частью набора сквозных тестов, который необходимо запустить для выполнения тестов.

Проблема: в зависимости от того, выполняю ли я тесты в контейнере докеров (3D-приложение в том же файле для создания докеров) или локально, мне приходится использовать разные порты (8080 или 8081), потому что запросы идут либо в сети докеров или на главном компьютере. Это неудобно.

Вопрос: Есть ли способ переназначить порты в файле compose таким образом, чтобы порт был одинаковым внутри и вне сети докеров? Например, было бы здорово, если бы я мог обратиться к app-2, используя порт 8081 внутри сети докеров.

Буду признателен за любые советы.


person Sasha Shpota    schedule 07.07.2020    source источник
comment
Вы не можете заставить программу прослушивать другой порт?   -  person SuperSandro2000    schedule 07.07.2020
comment
@ SuperSandro2000, если бы я мог, это не было бы проблемой :)   -  person Sasha Shpota    schedule 07.07.2020


Ответы (1)


У меня возникла аналогичная проблема, и я решил ее, используя следующий метод. Это было приложение NodeJS-express.

  1. Я запустил контейнер на определенном порту и подключился к интерфейсу командной строки контейнера. Нашел файл среды, в котором был определен порт.
  2. Скопировал этот файл с помощью docker cp на свой локальный компьютер.
  3. Изменил файл и обновил порт.
  4. Остановил контейнер.
  5. Снова заменил файл среды внутри контейнера обновленным файлом

используя docker cp

Зафиксировал этот контейнер как изображение, используя docker commit

Запустите контейнер на обновленном порту и используйте только что зафиксированный образ.

person Faisal    schedule 07.07.2020
comment
Что ж, это требует ручных усилий, как и ручное изменение порта в моем текущем подходе. Этого я хочу избежать. - person Sasha Shpota; 07.07.2020
comment
Другого способа сделать это нет, так как вы можете сопоставить только порт, который прослушивает ваше приложение. Это требует ручного труда один раз, так как вы можете зафиксировать изображение, а затем использовать его вместо предоставленного. Еще один способ - сопоставить файл env с обновленным портом. - person Faisal; 07.07.2020