首页 > 解决方案 > 在 docker 中运行 MS SQL 服务器拒绝连接

问题描述

我在将 MSSQL Server Management Studio 连接到正在运行的 docker 容器时遇到问题。

docker 初学者。

我创建了以下docker-compose.yml文件:

version: '3.4'

services:
  sqlserver:
    image: "mcr.microsoft.com/mssql/server:2017-latest"
    volumes:
      - /var/lib/docker/volumes/sql_volume/_data
    environment:
      ACCEPT_EULA: "Y"
      SA_PASSWORD: "pa55w0rd!"
      MSSQL_PID: "Express"
    ports:
      - "1533:1534"
  adventureworks_service:
    image: ${DOCKER_REGISTRY-}adventureworksservice
    build:
      context: .
      dockerfile: AdventureWorks_Service/Dockerfile

这个 docker 文件应该启动一个 MSSQL 数据库和位于我的解决方案中的 Adventureworks_service 项目。

这个 docker-compose 位于它自己的 Docker 项目中,在解决方案中。使用“添加 docker 支持”为我的 Web API 项目创建

假设一切设置正确,我应该能够连接到 sql server localhost:1533,使用 SQL server authentication with loginExpress和 password pa55w0rd!

尝试连接后立即出现以下错误(没有超时等)

A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider : TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host) (Microsoft SQL Server, Error: 10054)

有谁知道我如何访问这个服务器/容器?

提前致谢

标签: sql-serverdocker

解决方案


mssql中的端口应该是1433而不是1534,试试这个

version: '3.4'

services:
  sqlserver:
    image: "mcr.microsoft.com/mssql/server:2017-latest"
    volumes:
      - /var/lib/docker/volumes/sql_volume/_data
    environment:
      ACCEPT_EULA: "Y"
      SA_PASSWORD: "pa55w0rd!"
      MSSQL_PID: "Express"
    ports:
      - "1433:1433"   # the port behind should always be 1433

  adventureworks_service:
    image: ${DOCKER_REGISTRY-}adventureworksservice
    build:
      context: .
      dockerfile: AdventureWorks_Service/Dockerfile

那么你的连接字符串应该是这样的

Data Source=sqlserver,1433;User Id=SA;Password=pa55w0rd!

推荐阅读