Docker 如何从.NET 应用程序读取配置?如果启用了 Docker,应用程序中会使用哪些配置?

问题描述 投票:0回答:1

我已经使用 Docker compose 通过 ASP.NET Core 8 MVC 应用程序设置了 Docker。根据我的

compose.yaml
,有两个容器,一个用于MySQL数据库(卷),一个用于服务器。我成功地设置了两个容器,并能够使用
docker exec
与 Docker 卷中的数据库进行交互。数据从本地目录中的
.sql
加载。

但是,我目前面临的问题是我无法将我的应用程序连接到 Docker 中的数据库。

PS:我的

Dockerfile
是运行
docker init
时的默认值。

compose.yaml

services:
  database:
    image: mysql:latest
    ports: 
       - 3306:3306
    volumes:
       - ./sql-script:/docker-entrypoint-initdb.d
       - datafiles:/var/lib/mysql
    restart: always
    environment:
        MYSQL_ROOT_PASSWORD: ${ROOT_PASSWORD}
        MYSQL_USER: ${USER}
        MYSQL_PASSWORD: ${PASSWORD}
        MYSQL_DATABASE: ${DB}
  server:
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - database
    ports:
      - 8080:8080 
    environment:
      - DBHOST=database
      - ASPNETCORE_ENVIRONMENT=Development
    restart: always
    develop:
        watch:
         - action: rebuild
           path: .
volumes:
  datafiles:

Program.cs

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<myDatabaseContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("myDatabase") ?? throw new InvalidOperationException("Connection string 'myDatabase' not found.")));

根据我的理解,我仍然不确定Docker如何读取应用程序配置文件。

  1. launchSettings.json
    - 此文件仅在开发模式下工作,并且与 Visual Studio 中的播放按钮直接相关。就我而言,这个文件可以忽略。
  2. appsettings.json
    - 仍然不确定这个,是否接到电话?
  3. appsettings.Development.json
    - 这就是我的
    compose.yaml
    的名字。我假设当我定义
    ASPNETCORE_ENVIRONMENT=Development
    时,这就是加载的文件。

目前,我已经在

connectionStrings
中定义了我的
appsettings.json
,看起来像这样

"ConnectionStrings": {
    "myDatabase" : "Server=localhost,3306; Database=myDb; User=admin; Password=pass;"
}

如果我错了,请纠正,如果我在

ASPNETCORE_ENVIRONMENT=Development
中设置
compose.yaml
,这是否意味着所有应用程序配置文件将从
appsettings.Devlopment.json
读取,而不是从
appsettings.json
读取。

第二个问题:什么时候会调用

appsettings.json
而不是
appsettings.Development.json
?我在哪里定义它调用不同配置文件的指令?

c# docker asp.net-core-mvc asp.net-core-8
1个回答
0
投票

您的数据库服务器在环境变量

database
中定义的名为
DBHOST
的主机上运行,但在连接字符串中您尝试连接到
localhost
。改变你的 ConnectionString 它应该可以工作

"ConnectionStrings": {
     "myDatabase" : "Server=database,3306; Database=myDb; User=admin; Password=pass;"
}
© www.soinside.com 2019 - 2024. All rights reserved.