Docker compose - внешние ссылки перестают работать после успешного перезапуска
Ситуация такова: у меня есть три разных докера, которые создают файлы для трех разных проектов: фронтэнда, промежуточного программного обеспечения и бэкэнда. FE это Ember, middleware и backend spring (багажник). Что не должно иметь значения здесь, хотя. Промежуточное программное обеспечение использует external_link для внутреннего интерфейса, а внешний интерфейс (UI) использует external_link для промежуточного программного обеспечения.
Когда я начинаю с чистого докера (docker stop $(docker ps -aq), docker rm $(docker ps -aq)), все работает нормально: я запускаю бэкенд с помощью docker-compose up, затем middleware, затем frontend. Все хорошо, все внешние ссылки работают (также запускает тесты Cypress e2e на этой установке - работает отлично).
Теперь, когда я что-то изменил в промежуточном программном обеспечении, перестроил образ, остановил контейнер (control+c) и перезапустил его с помощью docker-compose up, а затем попытался перезапустить внешний интерфейс (control+c и затем docker-compose up), Докер скажет мне:
Starting UI ... error
ERROR: for UI Cannot start service ui: Cannot link to a non running container: /32f2db8e96a1_middleware AS /ui/backend
ERROR: for UI Cannot start service ui: Cannot link to a non running container: /32f2db8e96a1_middleware AS /ui/backend
ERROR: Encountered errors while bringing up the project.
Что меня раздражает: откуда взялся "32f2db8e96a1"? Для имени контейнера промежуточного программного обеспечения установлено значение "промежуточное программное обеспечение", которое также используется во внешней ссылке пользовательского интерфейса и прекрасно работает для каждого чистого запуска (имеется в виду использование docker rm "-all" ранее). Кроме того, Docker PS показывает мне, что контейнер для промежуточного программного обеспечения на самом деле работает.
К сожалению, я не могу публиковать здесь файлы, но я хочу добавить любую необходимую информацию.
Работает на Docker версии 18.09.0, сборка 4d60db4 Ubuntu 18.04.1 LTS
Я хотел бы перезапустить любой из этих контейнеров без разорванной внешней ссылки. Как мне этого добиться?
Поскольку вы, ребята, уделяете мне время, я потратил время на то, чтобы очистить два произведения. Это интерфейс / интерфейс:
files:
version: '2.1'
services:
ui:
container_name: x-ui
build:
dockerfile: Dockerfile
context: .
image: "xxx/ui:latest"
external_links:
- "middleware:backend"
ports:
- "127.0.0.1:4200:80"
network_mode: bridge
Это промежуточное ПО:
version: '2.1'
services:
middleware:
container_name: x-middleware
image: xxx/middleware:latest
build:
dockerfile: src/main/docker/middleware/Dockerfile
context: .
ports:
- "127.0.0.1:8080:8080"
- "127.0.0.1:9003:9000"
external_links:
- "api"
network_mode: "bridge"
Api, по сути, то же самое, что и middleware.
Обратите внимание: я удалил тома и окружение. Также я переименовал, чтобы имена сообщений об ошибках не подходили идеально. Обратите внимание, что схема именования та же: имя службы выглядит как "middleware", имя контейнера использует префикс "x-middleware".