То, что вы описываете, невозможно сделать с параметром expose
.--net=host
указывает вашему контейнеру работать в сети хоста, открывая все порты всех ваших контейнеров, запущенных с этим флагом.
Вы можете создать сеть докеров и подключить к ней оба контейнера.
Пример:
$ docker network create mynetwork --driver bridge
$ docker run -d --name containerA -p 8080:8080 --net=mynetwork <image>:tag
$ docker run -d --name containerB -p 8081:8081 --net=mynetwork <image>:tag
Это создаст запись DNS для containerA
и containerB
с тем же именем контейнера, которое будет разрешено из любого контейнера в вашей пользовательской сети.
Так что теперь, если вы хотите получить доступ к containerB
из containerA
, вы просто используете имя контейнера, например:
curl http://containerB:8080
Другим решением будет использование docker-compose:
version: '3'
services:
containerA:
image: <image>:<tag>
containerB:
image: <image>:<tag>
Поскольку docker-compose также создает пользовательскую сеть, вы можете обращаться к контейнерам так же, как я описал ранее.
Подробнее о docker-compose и определяемых пользователемсети здесь: https://docs.docker.com/compose/overview/
https://docs.docker.com/network/bridge/