Docker compose - сбой внешних ссылок после успешного перезапуска - PullRequest
0 голосов
/ 08 января 2019

ситуация такая: У меня есть три разных докера, которые создают файлы для трех разных проектов: веб-интерфейс, промежуточное программное обеспечение и серверная часть. 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».

...