Несколько док-контейнеров с одним контейнерным портом, подключенным к одной сети - PullRequest
1 голос
/ 16 марта 2019

У меня есть приложение, которое зависит от нескольких док-контейнеров.Я использую docker compose, чтобы все они находились в одной сети для взаимодействия между контейнерами.Но два из моих контейнеров прослушивают один и тот же порт 8080 внутри своих соответствующих контейнеров, но сопоставлены с разными портами на хосте: 8072,8073.Для связи между контейнерами, поскольку мы используем порт контейнера, это вызовет проблемы?

Ограничения:

  1. Мне нужны оба контейнера для запуска моего приложения.Таким образом, я не могу изолировать другой контейнер с таким же внутренним портом от другой сети
  2. Все контейнеры должны работать на одном хосте.

Я новичок в докере, и я не уверен, как это сделатьРешите это.

Спасибо

1 Ответ

2 голосов
/ 17 марта 2019

IIUC см. Документацию здесь: https://docs.docker.com/compose/networking

Вам не нужно открывать каждый из портов службы на хосте, если только вы не хотите получать к ним доступ с хоста, т. Е. Вне созданной docker-compose сети.

Порты должны быть уникальными для каждого хоста , но каждая служба в вашей созданной docker-compose сети может безнаказанно использовать один и тот же порт и на него ссылаются:.

В примере Docker может быть 2 службы Postgres. Каждому потребуется уникальное имя: db1; db2, но оба могут использовать один и тот же порт - "5432" и быть уникально адресуемыми из службы, называемой web (и друг с другом), как db1:8432 и db2:8432.

Каждый сервис эффективно соответствует отдельному хосту. Таким образом, если порты уникальны для каждого хоста службы, все в порядке. И если все порты, которые вы выставляете на хосте, уникальны, вы тоже хороши ...

Расширяя пример, db1 может предоставить порт 9432:8432, но тогда db2 потребуется найти другой порт хоста для использования, возможно, 9433:8432.

В созданной docker-compose сети вы получите доступ к db1 как db1:8432 и db2 как db2:8432.

С хоста (вне сети создания docker-compose) вы получите доступ к db1 как localhost:9432 и db2 как localhost:9433.

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

...