在 docker 中运行 MS SQL 服务器拒绝连接

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

我在使用 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 项目创建

假设一切设置正确,我应该能够使用带有登录名

localhost:1533
和密码
Express
的 SQL Server 身份验证连接到
pa55w0rd!
上的 sql 服务器。

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

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-server docker
3个回答
1
投票

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!

0
投票

尝试将

network_mode: "host"
添加到您的撰写文件中。

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"
    network_mode: "host"

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

0
投票

如果您使用的是 Windows 并使用 Docker for SQL Server:

sudo docker run -e "ACCEPT_EULA=Y" -e 'MSSQL_SA_PASSWORD=YourStrongPassword' -p 1434:1433 --name sql1 --hostname sql1 -d mcr.microsoft.com/mssql/server

确保端口映射避免与 Windows 上的其他服务发生冲突。如有必要,请使用不同的外部端口(例如 1434)以避免冲突。请注意,SQL Server 的 SSL 端口默认为 1433。使用映射端口连接 SSMS 并确保相应配置 TLS 设置。

© www.soinside.com 2019 - 2024. All rights reserved.