首页 > 解决方案 > 无法连接到 compose 中的容器,但主机连接有效

问题描述

使用 docker 撰写文件

  version: '3'
    services:
      sqlserver:
        image: microsoft/mssql-server-linux:2017-latest
        ports:
          - 1401:1433
        volumes:
          - ./db:/tmp/data
        environment:
          - ACCEPT_EULA=Y
          - "MSSQL_SA_PASSWORD='Password99'"
        command:
          - /tmp/data/run.sh
      api:     
          build: 
            context: .
            dockerfile: dockerfile
          depends_on:
                    - sqlserver
          links:
                - sqlserver
          ports:
                - 5000:80

使用 appsettings.json 连接字符串:

"ConnectionStrings": {
    "Entities": "data source=(local),1401;initial catalog=DB_Test;user id=sa;password=Password99;enlist=False;multipleactiveresultsets=True;connect timeout=30;App=EntityFramework"
  },

我得到错误

api_1 | System.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:TCP 提供者,错误:40 - 无法打开与 SQL Server 的连接)

从运行 api 实例的主机到在 docker-compose 中运行的 sql server 实例的连接工作正常,因此在容器中运行的 SQL 实例很好。

任何人都可以帮助 docker 内的 api 和 sql 之间的连接吗?

谢谢!

标签: dockerdocker-compose

解决方案


在 docker 内部,数据库的主机名将是“sqlserver”而不是 localhost 或 127.0.0.1


推荐阅读