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".

0 ответов

Другие вопросы по тегам