Ham*_*med 7 sql-server entity-framework database-connection docker asp.net-core
我正在尝试为我在 docker 上部署的服务设置数据库连接,其中服务和数据库都是 dockerized 的。
当我将有效负载发布到服务的 API 时,出现以下错误:
SqlException:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:TCP 提供程序,错误:40 - 无法打开与 SQL Server 的连接)
API 定义为:
[HttpPost]
public async Task<IActionResult> Postfoo([FromBody] Foo foo)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
_context.Foos.Add(foo);
await _context.SaveChangesAsync();
return CreatedAtAction("GetFoo", new { id = foo.ID }, foo);
}
Run Code Online (Sandbox Code Playgroud)
数据库连接定义如下appsettings.json:
"ConnectionStrings": {
"DefaultConnection": "Server=tcp:127.0.0.1,1433;Trusted_Connection=True;MultipleActiveResultSets=true;User ID=sa;Password=Pass@word"
},
Run Code Online (Sandbox Code Playgroud)
定义db连接的启动逻辑Startup.cs如下:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddDbContext<WorkflowContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
Run Code Online (Sandbox Code Playgroud)
在 中docker-compose.yml,数据库服务定义为:
version: '3.4'
services:
sql.data:
image: microsoft/mssql-server-linux:2017-latest
Run Code Online (Sandbox Code Playgroud)
在 中docker-compose.override.yml,与数据库相关的部分定义为:
version: '3.4'
services:
sql.data:
environment:
- SA_PASSWORD=Pass@word
- ACCEPT_EULA=Y
ports:
- "1433:1433"
Run Code Online (Sandbox Code Playgroud)
我可能忽略了,但仍然看不到缺少什么?
为了在两个容器之间共享网络,我们可以使用 docker-compose 来创建共享网络。
请按照以下步骤操作:
docker 撰写
version: '3.4'
services:
coredocker:
image: coredocker
build:
context: .
dockerfile: CoreDocker/Dockerfile
sql.data:
image: microsoft/mssql-server-linux:2017-latest
environment:
- SA_PASSWORD=Pass@word
- ACCEPT_EULA=Y
ports:
- "1433:1433"
Run Code Online (Sandbox Code Playgroud)appsettings.json
{
"ConnectionStrings": {
"DefaultConnection": "Server=sql.data,1433;Database=CoreDocker;MultipleActiveResultSets=true;User ID=sa;Password=Pass@word"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
Run Code Online (Sandbox Code Playgroud)这里有两点:
Server=tcp:127.0.0.1,1433;为Server=sql.data,1433服务名称和端口Trusted_Connection=True; | 归档时间: |
|
| 查看次数: |
5936 次 |
| 最近记录: |