【发布时间】:2019-07-31 05:38:51
【问题描述】:
我正在尝试为我在 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);
}
数据库连接在appsettings.json中定义如下:
"ConnectionStrings": {
"DefaultConnection": "Server=tcp:127.0.0.1,1433;Trusted_Connection=True;MultipleActiveResultSets=true;User ID=sa;Password=Pass@word"
},
定义db连接的Startup.cs中的启动逻辑如下:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddDbContext<WorkflowContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
在docker-compose.yml中,数据库服务定义为:
version: '3.4'
services:
sql.data:
image: microsoft/mssql-server-linux:2017-latest
在docker-compose.override.yml中,与数据库相关的部分定义为:
version: '3.4'
services:
sql.data:
environment:
- SA_PASSWORD=Pass@word
- ACCEPT_EULA=Y
ports:
- "1433:1433"
我可能忽略了,但仍然看不到缺少什么?
【问题讨论】:
标签: sql-server entity-framework docker asp.net-core database-connection