Docker-compose 覆盖不覆盖连接字符串

Vin*_*mth 4 sql-server docker-compose asp.net-core

我有一个连接到 SQL 数据库的 ASP.NET Web 应用程序。

appsettings.Development.json连接字符串中定义为

"ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=WebRecipes-LocalDev;Trusted_Connection=True;ConnectRetryCount=0"
  }
Run Code Online (Sandbox Code Playgroud)

在我的docker-compose.yml文件中,我得到了最新的mssql-server-linux

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

  webrecipes.api:
     image: ${DOCKER_REGISTRY-}webrecipesapi
     build:
       context: .
       dockerfile: src/WebRecipes.Api/Dockerfile
Run Code Online (Sandbox Code Playgroud)

docker-compose.override.ymlsql.data为我的 asp.net 核心应用程序设置用户名和密码并覆盖连接字符串

services:
  sql.data:
    environment:
      - SA_PASSWORD=Pass@word
      - ACCEPT_EULA=Y
    ports:
      - "5533:1433"

  webrecipes.api:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_HTTPS_PORT=44302
      - ConnectionString=Server=sql.data;database=WebRecipes-LocalDev;User Id=sa;Password=Pass@word
    ports:
      - "2282:80"
      - "44302:443"
    volumes:
      - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
    depends_on:
      - sql.data
Run Code Online (Sandbox Code Playgroud)
  • 编辑:我还尝试将连接字符串设置为:

- ConnectionStrings:DefaultConnection=sql.data;database=WebRecipes-LocalDev;User Id=sa;Password=Pass@word

当我运行应用程序并且它第一次尝试访问数据库时,我收到错误消息,说不支持 LocalDb,因为它使用了中定义的连接字符串 appsettings.Development.json

有人能帮忙吗?我不明白我做错了什么......

小智 9

使用双下划线对我有用

ConnectionStrings__DefaultConnection=sql.data;database=WebRecipes-LocalDev;User Id=sa;Password=Pass@word


Vin*_*mth 8

ASP.NET Core 官方文档关于环境变量配置的解释如下:

在环境变量中使用分层键时,冒号分隔符 (:) 可能不适用于所有平台(例如,Bash)。所有平台都支持双下划线 (__),并自动替换为冒号。