我正在try 使用Docker Compose在SQL Server容器中设置MSDTC,如下所述:

https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-configure-msdtc-docker?view=sql-server-ver15

我的合成文件如下所示,反映了上面文档中引用的命令行参数:

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

但是,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)

我还try 将以下内容添加到我的Dockerfile中,而不是设置MSSQL_DTC_TCP_PORT环境变量:

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

这并没有解决问题.

FWIW从命令行创建容器(如本文所示),而不是通过Docker Compose创建容器会产生相同的结果.请注意,我以根用户身份启动了容器,因此我可以运行lsof来进行故障排除.我还用了"2019-最新的",而不是"2019-GA-ubuntu-20.04",因为后者似乎已经不存在了:

docker run \
   -u root \
   -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=pass@1234' \
   -e 'MSSQL_RPC_PORT=135' -e 'MSSQL_DTC_TCP_PORT=51000' \
   -p 1433:1433 -p 135:135 -p 51000:51000  \
   -d mcr.microsoft.com/mssql/server:2019-latest

有没有人对如何启用DTC服务或如何进一步排除故障有任何建议?

推荐答案

根据Microsoft's documentation,在分布式事务开始之前,DTC服务器不会开始侦听.一旦发生这种情况,您应该会看到它正在侦听端口5Microsoft's documentation0.

Linux相关问答推荐

使用sed或awk映射自定义和任意函数

在Bluez/Linux中,周期性与连续蓝牙设备发现的已知缺陷是什么?

C++17/Linux:信号未解锁单独线程中被阻止的网络套接字调用

为什么我们不能使用${$#}来获取传递给shell 脚本的最后一个参数?

我想显示包含一个方括号的行,方括号可以是开括号,也可以是闭括号.

如何检测文件系统是否支持权限?

如何判断程序是在终端上运行还是在后台运行?

为什么waitpid(2)可以指定非子进程?

如何在具有多种可能性的linux shell中获取最大值和最小值?

CMake:处理静态库和共享库的正确方法

如何使用awk或其他方法提取双引号中的子字符串?

sed 命令在 gitlab runner 上无法正确执行

在三星 chromebook 上编程

在 Bash 中从最后到第一个输出文件行

bashrc 在运行 bash 命令之前不会加载

C++:使用 longjmp 和 setjmp 安全吗?

crt1.o:在函数_start中:-Linux 中未定义对main的引用

在linux上上几个目录

为嵌入式 Linux 设备实施更新/升级系统

在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403