Ссылки - неправильный способ сделать это. Ссылки работают путем изменения файла хоста контейнера, но эта модификация не обновляется при замене целевого контейнера. Они в значительной степени устарели из-за различных проблем, подобных этой.
Удалите ссылки из вашего файла компоновки и поместите контейнеры в обычную сеть, созданную пользователем (т.е. не в одну из нескольких сетей, предоставляемых докером по умолчанию). «Из коробки» compose предоставит вам сеть, созданную пользователем для ваших сервисов (сеть по умолчанию ${project}_default
, которую вы можете увидеть с помощью docker network ls
), или вы можете указать внешние сети при подключении контейнеров из нескольких проектов.
В общей сети docker предоставит вам разрешение DNS на основе имени контейнера и любых сетевых псевдонимов. С docker-compose
у вас будут сетевые псевдонимы, настроенные из коробки для имен сервисов. Поэтому, если у вас есть служба с именем «web», вы можете запустить curl http://web:8080
, чтобы подключиться к порту 8080 на любой из реплик службы «web». Этот пользовательский опыт идентичен при переходе в режим роя, хотя он реализован с использованием VIP, а не DNS-RR, который обрабатывает такие проблемы, как кэшированные записи DNS во время непрерывного обновления.