sql-server - Docker (Linux) 和 Windows 主机中的 SQL Server 的 MSDTC 配置问题
问题描述
我正在迁移本地 SQL Server 开发数据库以在 Linux docker 容器中运行(在同一台开发机器上)。在 Windows 上的 Visual Studio 2019 中运行我的集成测试时,我收到 MSDTC 错误:
抛出异常:System.Data.dll 中的“System.Transactions.TransactionManagerCommunicationException” System.Data.dll 中发生“System.Transactions.TransactionManagerCommunicationException”类型的异常,但未在用户代码中处理 与底层事务管理器的通信失败。
这是我在 docker-compose 中最新的 SQL Server 迭代:
services:
sqlserver:
image: mcr.microsoft.com/mssql/server:2019-latest
container_name: SqlServer
restart: always
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=verySecretPassword
- MSSQL_RPC_PORT=13500
- MSSQL_DTC_TCP_PORT=51000
ports:
- "1401:1433"
- "135:13500"
- "51000:51000"
volumes:
- sqldata:/var/opt/mssql
我已经尝试了各种方法来调整 RPC 端口以使其正常工作。这是主要的 MS 文章。我试过端口135:135
,但它给出了同样的错误。底部文章中的注释似乎与我的问题有关。
对于容器外部的 SQL Server 或非根容器,必须在容器中使用不同的临时端口(例如 13500),然后必须将到端口 135 的流量路由到该端口。您还需要在容器内配置从容器端口 135 到临时端口的端口路由规则。
此外,如果您决定将容器的端口 135 映射到主机上的其他端口,例如 13500,那么您必须在主机上配置端口路由。这使 docker 容器能够参与与主机和其他外部服务器的分布式事务。
SQL Server 2019 容器以非 root 用户身份运行。我已经尝试在 Windows 中使用 netsh 进行端口路由......还有 MS 文章链接到如何在 Ubuntu 中执行端口转发......即使在 SQL Server 容器中以 root 身份登录我也无法做到...... . iptables 没有安装,它不让我安装apt-get install
它??我还更新了 Windows 中的 DTC 选项,使其尽可能打开,但没有任何效果。不知道秘方是什么。希望其他人也有类似的设置。
解决方案
感谢您提供有关msdtc
配置的提示,我让我使用这个 compose:
version: '3.4'
services:
sqlserver:
image: mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
container_name: sqlserver
user: root
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=[yourPwd]
- MSSQL_RPC_PORT=135
- MSSQL_DTC_TCP_PORT=51000
ports:
- "1433:1433"
- "135:135"
- "51000:51000"
volumes:
- D:\DockerVolumes\sqlserver:/var/opt/mssql/data
推荐阅读
- python - Python中的简单函数模拟
- erlang - Ejabberd - 为自定义命令运行 SQL 查询
- python - 基于初始化位置的Python类多重初始化定义
- c - 链表 C 中的内存管理
- avaloniaui - 为什么在面板之间移动控件会导致延迟渲染出现异常?
- python - Kivy TextInput 位于 Android 键盘上方,但屏幕其余部分保持原位
- android - Android OpenGL ES,形状未显示在设备上,但在模拟器上工作正常?
- php - PayPal PHP SDK - 如何通过 PayPal 传递自定义变量?
- windows - 如何使用 Powershell 检查操作系统架构(32 位或 64 位)?
- moodle - 由于没有此类活动,因此无法在 Moodle 中创建考勤