Container Links
Связь контейнеров (Container Link) даёт одной рабочей нагрузке, потребителю, приватный доступ к одному TCP-порту другой рабочей нагрузки — цели. Потребитель обращается к цели как alias:port; цели не нужен опубликованный порт, и больше ничего не открывается. Потребителем и целью может быть Container, Deployment или служба Compose — на одной ноде Docker или на разных.
Используйте связь контейнеров, когда приложению нужно обращаться к внутренней службе другой рабочей нагрузки — API, очереди или кэшу — без публикации этой службы на хосте и без общей сети Docker. Для управляемых баз данных и управляемого объектного хранилища используйте привязки баз данных и привязки хранилища: они ещё и передают учётные данные.
Требования
Заголовок раздела «Требования»- Тариф: Personal и выше. Существующие связи продолжают работать после смены лицензии; для создания связи нужен действующий тариф. См. Тарифы и возможности.
- Docker-демон: на обеих нодах — потребителя и цели — нужен Docker-демон версии 2.11.1 или новее. Связь, нода которой работает со старым демоном, показывает update required, пока демон не обновлён.
- Права: для потребителя —
docker:containers:edit(docker:compose:manageдля службы Compose), а если связь задаёт переменные, ещё иdocker:containers:environment; для цели —docker:containers:link(docker:compose:manageдля службы Compose). Владелец цели выдаётdocker:containers:link, чтобы другие рабочие нагрузки могли к ней обращаться, не получая никакого другого доступа. См. Справочник прав.
Создание связи
Заголовок раздела «Создание связи»- Откройте потребителя: вкладку Environment у Container или Deployment либо вкладку Variables у Compose Project.
- В блоке Container Links нажмите Add. Для Compose Project выберите службу-потребителя в поле Service.
- Выберите Target type и рабочую нагрузку-цель на любой ноде Docker, а также TCP-порт цели в поле Port.
- Проверьте Alias. По умолчанию это имя цели; под этим именем потребитель подключается к ней. Допустимы строчные латинские буквы, цифры и дефисы; имя должно быть уникальным среди связей потребителя.
- При необходимости заполните Environment variables для хоста, порта или URL (
http://alias:port), напримерAPI_HOST,API_PORTилиAPI_URL. Если переменные заданы, потребитель один раз пересоздаётся, чтобы запуститься с ними; связь без переменных потребителя не перезапускает. - Сохраните и дождитесь статуса ready, затем выполните реальный запрос от потребителя к
alias:port.
Блок Incoming Links у цели показывает рабочие нагрузки, которые к ней обращаются. Связь удаляется в блоке Container Links потребителя; удаление убирает псевдоним, а если связь задавала переменные — удаляет и их ещё одним пересозданием.
API и MCP
Заголовок раздела «API и MCP»| Действие | REST | MCP и ассистент |
|---|---|---|
| Список связей рабочей нагрузки | GET /api/docker/container-links?nodeId=&type=&resourceId=&direction=outgoing|incoming |
manage_container_link list |
| Создание связи | POST /api/docker/container-links |
manage_container_link create |
| Чтение связи и её состояния | GET /api/docker/container-links/{id} и /{id}/runtime |
manage_container_link get_runtime |
| Удаление связи | DELETE /api/docker/container-links/{id} |
manage_container_link delete |
Рабочая нагрузка задаётся нодой, типом (container, deployment или compose_service) и ресурсом: именем контейнера, идентификатором Deployment или <compose-project-id>:<service-name>. Состояние связи показывает открытые соединения, сеансы, пропускную способность и отклонённые соединения — так же, как у привязок баз данных и хранилища.
Статусы
Заголовок раздела «Статусы»| Статус | Значение | Что делать |
|---|---|---|
| ready | Потребитель обращается к цели. | Ничего. |
| pending | Связь сохранена; потребитель получит её при следующем запуске или выкатке. | Запустите потребителя или завершите его выкатку. |
| waiting | Цель не запущена, или ни одна её копия не обслуживает запросы. | Запустите цель; связь заработает сама. |
| update required | Нода потребителя или цели работает с Docker-демоном старше 2.11.1. | Обновите Docker-демон на этой ноде. |
| error | Связь не удалось настроить; сообщение объясняет причину. | Устраните причину; Opfield повторит настройку сам. |
Как идёт трафик
Заголовок раздела «Как идёт трафик»На каждой ноде Docker работает один общий коннектор защищённых связей для всех её связей. Для каждой связи потребитель подключается к собственной небольшой приватной сети, и в ней на псевдоним отвечает коннектор. Сети связей получают адреса из отдельного диапазона; см. Общий коннектор и сети связей.
- Одна нода: коннектор передаёт каждое соединение напрямую цели.
- Разные ноды: соединение идёт через Relay к ноде цели с проверкой подлинности на обоих концах, как у любой другой Secure Link.
Связь открывает ровно один порт цели и в одном направлении: потребитель может обращаться к этому порту и ни к чему больше у цели. Цель не может обращаться к потребителю через связь, и другие рабочие нагрузки не могут ею пользоваться. Сеть связи принадлежит только этой связи.
Цели под Availability
Заголовок раздела «Цели под Availability»Если цель работает под Workload Availability, связь следует за исправными копиями:
- каждая нода потребителя предпочитает копию на своей ноде, а иначе использует другую исправную копию;
- когда Availability признаёт копию неисправной, связь сразу переводит соединения на исправную копию;
- восстановившаяся копия снова получает трафик связи только после того, как Availability сообщит, что она проходит проверки состояния; перезапущенная копия с ещё неизвестным состоянием не считается исправной;
- если исправных копий нет, связь остаётся на копиях, которые ещё обслуживают запросы, как и маршруты Availability.
К Deployment под Availability обращаются через его маршрутизатор, который пересылает только собственные порты Deployment. Поэтому порт связи должен быть одним из портов Deployment; иначе связь отклоняется при создании или переходит в error с причиной, когда порты Deployment меняются.
Устранение неполадок
Заголовок раздела «Устранение неполадок»- Потребитель не находит псевдоним: проверьте, что связь в статусе ready и приложение использует псевдоним, а не имя контейнера цели.
- Соединения отклоняются: проверьте, что цель принимает соединения на порту связи внутри своего контейнера и что порт связи — это порт контейнера, а не порт хоста.
- update required: обновите Docker-демон на ноде, указанной в сообщении; больше ничего менять не нужно.
- waiting: цель остановлена или ни одна копия Availability не обслуживает запросы; запустите или восстановите цель.