ситуация такая:
У меня есть три разных докера, которые создают файлы для трех разных проектов: веб-интерфейс, промежуточное программное обеспечение и серверная часть. FE это Ember, middleware и backend spring (багажник). Что не должно иметь значения здесь, хотя. Промежуточное программное обеспечение использует external_link для внутреннего интерфейса, а внешний интерфейс (UI) использует external_link для промежуточного программного обеспечения.
Когда я начинаю с чистого докера (docker stop $ (docker ps -aq), docker rm $ (docker ps -aq)), все работает нормально: я запускаю бэкэнд с помощью docker-compose, затем middleware, затем внешний интерфейс. Все хорошо, все внешние ссылки работают (также запускаются тесты Cypress e2e на этой установке - работает нормально).
Теперь, когда я что-то изменил в промежуточном программном обеспечении, перестроил образ, остановил контейнер (control + c) и перезапустил его с помощью docker-compose up, а затем попытался перезапустить интерфейс (control + c и затем docker-compose вверх), докер скажет мне:
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».