我在使用 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)
有谁知道我如何访问这个服务器/容器?
提前致谢
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!
尝试将
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
如果您使用的是 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 设置。