Sql server 用户登录失败';sa';仅在Azure管道上

Sql server 用户登录失败';sa';仅在Azure管道上,sql-server,docker,docker-compose,azure-devops,azure-pipelines,Sql Server,Docker,Docker Compose,Azure Devops,Azure Pipelines,我正在尝试在azure管道中运行e2e测试。但服务无法正确启动,因为它们无法连接到sql,出现以下错误: Error: 18456, Severity: 14, State: 7 Login failed for user 'sa'. Reason: An error occurred while evaluating the password. [CLIENT: 172.18.0.9] 令人困惑的是,它只会在azure管道上失败。在我的本地机器上,它工作没有任何问题。 我已经尝试了不同的

我正在尝试在azure管道中运行e2e测试。但服务无法正确启动,因为它们无法连接到sql,出现以下错误:

 Error: 18456, Severity: 14, State: 7
 Login failed for user 'sa'. Reason: An error occurred while evaluating the password. [CLIENT: 172.18.0.9]
令人困惑的是,它只会在azure管道上失败。在我的本地机器上,它工作没有任何问题。 我已经尝试了不同的密码和连接字符串。我在azure管道和我的机器上运行linux容器

docker compose.yml:

version: '3.4'

services:

  sqldata:
    image: mcr.microsoft.com/mssql/server:2017-latest

  identity-api:
    image: ${REGISTRY:-PROJECTNAME}/identity.api:${PLATFORM:-linux}-${TAG:-latest}
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - sqldata
docker compose.override.yml

version: '3.4'

services:

  sqldata:
    environment:
      - SA_PASSWORD=Pass@word
      - MSSQL_SA_PASSWORD=Pass@word
      - ACCEPT_EULA=Y
    ports:
      - "5433:1433"

  identity-api:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=http://0.0.0.0:80
      - ConnectionString=Server=sqldata;Database=IdentityDb;User Id=sa;Password=Pass@word

问题是,当服务尝试连接并运行迁移时,数据库仍在启动。我添加了一个检查,以在服务执行迁移之前等待主数据库准备就绪

while (IsServerConnected(connectionString) == false)
{
    logger.LogWarning("Database server not ready ({ConnectionString})...", connectionString);
    Thread.Sleep(5000);
}
...
private static bool IsServerConnected(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        try
        {
            connection.Open();
            return true;
        }
        catch (SqlException)
        {
            return false;
        }
    }
}

太好了,你修好了!你可以选择你的。