首页 > 解决方案 > 无法将 MsSql 数据库容器用作 Azure Pipeline 中的资源

问题描述

我尝试设置一个管道以使用 selenium 为小型 blazor 应用程序运行 E2E 测试。即使在 Windows 机器上使用容器,本地一切都运行良好。但是在天蓝色的管道中,我没有将应用程序连接到数据库。根据我下面的配置,我尝试了以下连接字符串:

Server=localhost,1433; Database=Master; User ID=sa; Password=Password!1;
Server=docker.host.internal,1433; Database=Master; User ID=sa; Password=Password!1;
Server=db,1433; Database=Master; User ID=sa; Password=Password!1;

没有任何效果:-(

我只有一个小型 blazor 前端和一个 mssql 数据库。我创建了一个 docker compose 文件,它创建了 db 容器以及构建应用程序和运行容器。这是码头工人撰写文件。

version: "3.9"
services:

  ms-sql-db:
    image: mcr.microsoft.com/mssql/server:2017-latest
    container_name: SqlDataBase
    ports:
      - "1433:1433"
    healthcheck:
        test: ["CMD", "/opt/mssql-tools/bin/sqlcmd", "-Usa", "-P", "Password!1", "-Q", "select 1"]
        interval: 1s
        retries: 20
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=Password!1
    volumes: #needed to persist the data on local disk
      - ~/.aspnet/mssql/data:/var/opt/mssql/data
      - ~/.aspnet/mssql/log:/var/opt/mssql/log
      - ~/.aspnet/mssql/secrets:/var/opt/mssql/secrets

  authfrontend:
    container_name: AuthFrontend
    build: 
        context: ../../../../src/AuthFrontend
        dockerfile: ./Dockerfile
    ports:
      - "5000:80"
      - "5001:443"
    environment:
      - ASPNETCORE_ENVIRONMENT=LocalE2ETest
      - ASPNETCORE_HTTPS_PORT=5001
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=Password!1
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ~/.aspnet/https:/https
    depends_on:
        ms-sql-db:
            condition: service_healthy

在我的 Windows 机器上本地,使用连接字符串时,前端能够连接到数据库

Server=localhost,1433; Database=Master; User ID=sa; Password=Password!1;

在管道内创建数据库容器作为资源,如下所示:

...
resources:
    containers:
      - container: SqlDataBase
        image: mcr.microsoft.com/mssql/server:2017-latest
        ports:
          - 1433:1433
        options: -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Password!1' -e 'MSSQL_PID=Express'
...
- stage: E2ETest
  jobs:  
  - job: Run E2E tests
    services:
      db: SqlDataBase
    steps:
    - powershell: docker-compose -f ./docker-compose.Frontend.yml build
      displayName: 'build app'
    - powershell: docker-compose -f ./docker-compose.Frontend.yml up -d
      displayName: 'run app'
    - script: dotnet test --collect:"XPlat Code Coverage" -l:trx;LogFileName=../../../out/TestResults/testresult.trx
      displayName: 'dotnet test and collect code coverage'

标签: asp.netblazorsql-server-2017

解决方案


推荐阅读