Здравствуйте, я не понял следующего:
-В мире docker мы имеем, насколько я понял:
applicationИтак, учитывая эти факты в конфигурации из 2 контейнеров в docker-expose
Если:
app | Host Port | Container Port | App Port
app1 8300 8200 8200
app2 9300 9200 9200
Если app2 необходимо связываться с app1 напрямую через docker-host, зачем мне использовать ссылки, если мне все еще нужно каким-то образом жестко закодировать в среде app2hostname и portapp1 (имя_контейнера app1 и port контейнера app1)? (В нашем например: port=8200 и host=app1Inst)
app1:
image: app1img
container_name: app1Inst
ports:
- 8300:8200 //application code exposes port 8200 - e.g sends to socket on 8200
networks:
- ret-net
app2:
image: app2img
container_name: app2Inst
ports:
- 9300:9200
depends_on:
- app1
networks:
- ret-net
links:
- app1
///i still need to say here
/ environment : -
/ - host=app1Inst
/ - port=8200 --what do i gain using links?
networks:
ret-net:


Короткий ответ, нет, вам не нужны ссылки, также он теперь устарел в докере и не рекомендуется. https://docs.docker.com/network/links/
При этом, поскольку оба ваших контейнера находятся в одной сети ret-net, они смогут свободно обнаруживать и связываться друг с другом на всех портах, даже без настройки ports.
Параметр ports используется для внешнего доступа к контейнеру, например с главной машины.
Параметр environment просто устанавливает переменные среды в контейнере, поэтому приложение знает, как найти app1Inst и правильный порт 8200.
Я говорю о том, что докеру не нужно ничего открывать, все порты широко открыты. Два контейнера в одной сети могут свободно обмениваться данными на любом порту. Это когда вы хотите получить к нему доступ извне (например, с хоста), это когда вам нужно начать открывать порты.
Вам не нужно использовать ссылки в современном Docker. Но вам определенно не следует нигде жестко кодировать имена хостов или порты. (См., Например, каждый вопрос SO, в котором отмечается, что вы можете взаимодействовать со службами как localhost при работе непосредственно в системе разработчика, но при работе в Docker требуется другое имя хоста.). Файл docker-compose.yml представляет собой конфигурацию времени развертывания, и это хорошее место для установки переменных среды, которые указывают от одной службы к другой.
Как вы отметили в предложенном вами файле docker-compose.yml, сети Docker и связанная с ними служба DNS в основном полностью заменяют ссылки. Сначала были ссылки, но они уже не так полезны.
Также обратите внимание, что Docker Compose создаст для вас сеть по умолчанию и что имена служебных блоков в файле docker-compose.yml действительны как имена хостов. Вы можете уменьшить этот файл до:
version: '3'
services:
app1:
image: app1img
ports:
- '8300:8200'
app2:
image: app2img
ports:
- '9300:9200'
env:
APP1_URL: 'http://app1:8200'
depends_on:
- app1
Но если я не выставлю
container_portдля моегоapplicationи скажу где-нибудь в моем коде, я начну слушатьsocketчерез порт8500. Вы говорите мне, чтоdockerавтоматически создастcontainer_port_mappingдля моегоin-code port, чтобы другие контейнеры могли взаимодействовать с Это?