docker compose не запускает службы параллельно - PullRequest
0 голосов
/ 05 марта 2020

Полагаю, docker-compose up может запускать несколько служб параллельно ( REF ).

У меня есть приложение, которое зависит от нескольких служб (например, база данных). Приложение реализовано в ASP. NET Core и использует Polly для устойчивости ; например, дождитесь базы данных в течение определенных промежутков времени, если выбрасывается данное исключение, повторите попытку подключения к базе данных определенное количество раз, прежде чем выдать исключение.

var policy = Policy
    .Handle<HttpRequestException>()
    .WaitAndRetryAsync(new[] { 
        TimeSpan.FromSeconds(1), 
        TimeSpan.FromSeconds(2), 
        TimeSpan.FromSeconds(4) 
    });

Когда я запускаю проект, используя docker-compose up, я ожидаю, что Polly попытается подключиться к базе данных, но поскольку база данных еще не готова, она должна подождать несколько секунд и повторить попытку, и, надеюсь, после нескольких попыток база данных будет готова и она сможет подключиться. Однако похоже docker-compose up не запускает службы параллельно, потому что не имеет значения, сколько раз Poly удаляется и как долго он ждет (например, даже часы), база данных не запускается, когда мое приложение Служба ожидает / повторная попытка, и служба базы данных запускается сразу после моего приложения и пытается / ждал в течение определенного периода и выдал исключение.

Я определяю docker составить как:

version: '3.7'

services:

  sql.data:
    container_name: db_service
    image: microsoft/mssql-server-linux:2017-latest

  my_service:
    container_name: my_service_container
    image: ${DOCKER_REGISTRY-}my_service
    build:
      context: .
      dockerfile: MyService/Dockerfile
    depends_on:
      - sql.data

и журнал выглядит так:

Recreating db_service ... done
Recreating my_service_container ... done
Attaching to db_service, my_service_container 
my_service_container | info: ...Context[0]
my_service_container |       Migrating database associated with context Context
my_service_container | info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
my_service_container |       Entity Framework Core 3.1.1 initialized 'Context' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: MigrationsAssembly=MyService
my_service_container | fail: Context[0]
my_service_container |       An error occurred while migrating the database used on context Context
my_service_container | Microsoft.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server)
...
EXCEPTION DETAILS ... 
MANY RETRIES AND WAITS
...
my_service_container | ClientConnectionId:00000000-0000-0000-0000-000000000000
my_service_container exited with code 0
db_service | 2020-03-05 05:45:51.82 Server      Microsoft SQL Server 2017 (RTM-CU13) (KB4466404) - 14.0.3048.4 (X64)
        Nov 30 2018 12:57:58
        Copyright (C) 2017 Microsoft Corporation
        Developer Edition (64-bit) on Linux (Ubuntu 16.04.5 LTS)
2020-03-05 05:45:51.82 Server      UTC adjustment: 0:00
2020-03-05 05:45:51.82 Server      (c) Microsoft Corporation.
2020-03-05 05:45:51.82 Server      All rights reserved.
2020-03-05 05:45:51.82 Server      Server process ID is 4120.
2020-03-05 05:45:51.82 Server      Logging SQL Server messages in file '/var/opt/mssql/log/errorlog'.
2020-03-05 05:45:51.82 Server      Registry startup parameters:
         -d /var/opt/mssql/data/master.mdf
         -l /var/opt/mssql/data/mastlog.ldf
         -e /var/opt/mssql/log/errorlog

Обратите внимание на комментарий выше, похоже, служба базы данных имеет даже не запустился до того, как мое приложение повторило / ожидало, а затем не удалось.

Я что-то упустил в docker или docker -композиции?

...