首页 > 解决方案 > 如何从 Azure Devops ubuntu 构建代理访问 docker sql server 数据库?

问题描述

我正在尝试对 Azure Devops 管道中正在运行的 dockerized .net 核心应用程序运行一些集成测试,但我似乎无法让 ubuntu 代理连接到也在 docker 中运行的 SQL 服务器数据库。

Microsoft.Data.SqlClient.SqlException : Cannot open database "OconnorEventsEventCatalogDb" requested by the login. The login failed. Login failed for user 'sa'.

这是我正在使用的连接字符串...

Server=127.0.0.1,1433;Database=OconnorEventsEventCatalogDb;User=sa;Password=<Password>

当我执行 adocker compose up -d后跟 a时,这在本地有效dotnet test <PathToTestProject>

尝试访问数据库的实际代码在这里...

var options = new DbContextOptionsBuilder<EventCatalogDbContext>()
    .UseSqlServer(Global.ConnectionString);

using (var context = new EventCatalogDbContext(options.Options))
{
    Policy
        .HandleResult<DatabaseFacade>(d => d.CanConnect() != true)
        .Retry(3, onRetry: (exception, retryCount) => { Thread.Sleep(10000); })
        .Execute(() => context.Database);

    await context.Database.ExecuteSqlRawAsync("DELETE FROM Categories");
    await context.Database.ExecuteSqlRawAsync("DELETE FROM Events");

    context.Categories.Add(category);
    context.Events.AddRange(events);
    await context.SaveChangesAsync();
}

我尝试添加重试策略以防 sql server 容器尚未准备好但仍然失败。

我还在docker ps管道中添加了一个响应以下内容的...

CONTAINER ID   IMAGE                            COMMAND                  CREATED        STATUS                  PORTS                                                        NAMES
d2cf21d130b4   oconnoreventseventcatalog        "dotnet OconnorEvent…&quot;   1 second ago   Up Less than a second   80/tcp, 443/tcp, 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   oconnoreventseventcatalog
44d73605aa85   mcr.microsoft.com/mssql/server   "/opt/mssql/bin/perm…&quot;   1 second ago   Up Less than a second   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp                    oconnoreventsqlserver

我在这里错过了什么吗?

这是我的docker-compose.yaml文件,专门用于针对正在运行的项目运行集成测试...

version: '3.4'

networks:
  oconnorevents-network:

services:
  oconnorevents.eventcatalog:
    container_name: oconnoreventseventcatalog
    image: oconnoreventseventcatalog
    build:
      context: ../
      dockerfile: OconnorEvents.EventCatalog/Dockerfile
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=http://+:5000
      - ConnectionStrings__DefaultConnection=Server=oconnoreventsqlserver;Database=OconnorEventsEventCatalogDb;User=sa;Password=<Password>
    ports:
      - "5000:5000"
    networks:
      - oconnorevents-network
    depends_on:
      - oconnorevents.sqlserver

  oconnorevents.sqlserver:
    container_name: oconnoreventsqlserver
    image: "mcr.microsoft.com/mssql/server"
    user: root
    ports:
      - "1433:1433"
    environment:
        SA_PASSWORD: "<Password>"
        ACCEPT_EULA: "Y"
    networks:
      - oconnorevents-network

标签: dockerasp.net-coreazure-devops

解决方案


推荐阅读