You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker化Linux版SQL Server的MSDTC配置问题求助

问题:SQL Server容器中MSDTC服务无法启动

配置背景

尝试为SQL Server容器配置MSDTC,参照官方文档编写Docker Compose文件,同时也尝试过在Dockerfile中直接设置DTC端口,但均未成功。

Docker Compose配置

services:
  pte_mssql:
    build:
      context: ./mssql/docker
    environment:
      ACCEPT_EULA: 'Y'
      MSSQL_SA_PASSWORD: '${startupSaPassword}'
      MSSQL_RPC_PORT: 135
      MSSQL_DTC_TCP_PORT: 51000
    ports:
      - 1433:1433
      - 135:135
      - 51000:51000

尝试过的Dockerfile配置

RUN /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51000

故障现象

  • DTC服务始终无法启动,日志重复出现以下内容:
Waiting for TCP socket on 172.24.0.1:51000 of 'pte_mssql_1' (Connection refused (Connection refused))
Will use 172.24.0.1 (network vestmarkone_default) as host of pte_mssql
More forwarded TCP ports for service 'pte_mssql:135 [[HostIp:0.0.0.0, HostPort:135], [HostIp:::, HostPort:135]]'. Will use the first one.
More forwarded TCP ports for service 'pte_mssql:1433 [[HostIp:0.0.0.0, HostPort:1433], [HostIp:::, HostPort:1433]]'. Will use the first one.
More forwarded TCP ports for service 'pte_mssql:51000 [[HostIp:0.0.0.0, HostPort:51000], [HostIp:::, HostPort:51000]]'. Will use the first one.
  • 进入容器执行监听端口检查,发现51000端口无进程监听:
root@906e7184f6bc:/var/opt/mssql/log# lsof -i -P -n | grep LISTEN
sqlservr   9 root   49u  IPv4 1613252      0t0  TCP *:135 (LISTEN)
sqlservr   9 root   51u  IPv6 1613254      0t0  TCP *:135 (LISTEN)
sqlservr   9 root   64u  IPv6 1617097      0t0  TCP *:1433 (LISTEN)
sqlservr   9 root  100u  IPv4 1617098      0t0  TCP *:1433 (LISTEN)
sqlservr   9 root  106u  IPv4 1629465      0t0  TCP 127.0.0.1:1434 (LISTEN)
sqlservr   9 root  110u  IPv4 1617101      0t0  TCP 127.0.0.1:1431 (LISTEN)
  • 直接使用官方镜像通过命令行启动容器,同样出现该问题。

排查与解决建议

  • 验证DTC核心配置:进入容器执行/opt/mssql/bin/mssql-conf get distributedtransaction.servertcpport确认端口是否正确设置为51000,同时检查distributedtransaction.enabled是否为yes,若未开启需执行/opt/mssql/bin/mssql-conf set distributedtransaction.enabled yes并重启容器。
  • 调整容器网络模式:默认bridge网络可能存在端口转发限制,可尝试使用host网络(需注意宿主机端口冲突),或创建自定义bridge网络;在Compose中添加network_mode: host(移除ports映射),或定义自定义网络:
    networks:
      mssql-net:
        driver: bridge
    
    并为服务指定该网络。
  • 添加容器权限:MSDTC启动可能需要额外系统权限,在Compose中添加以下配置:
    cap_add:
      - SYS_PTRACE
    security_opt:
      - seccomp:unconfined
    
  • 查看详细错误日志:检查容器内/var/opt/mssql/log/errorlog文件,查找DTC启动相关的具体错误信息,比如依赖服务未启动、权限不足等。
  • 更新镜像版本:尝试使用最新的SQL Server 2019镜像,确保镜像包含最新的MSDTC修复补丁。
  • 检查宿主机防火墙:确认宿主机防火墙允许51000、135端口的入站和出站流量,避免端口被拦截。

内容的提问来源于stack exchange,提问作者Greg Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:05:41