Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows Docker容器MSMQ出列消息从未到达目标_Windows_Docker_Containers_Msmq - Fatal编程技术网

Windows Docker容器MSMQ出列消息从未到达目标

Windows Docker容器MSMQ出列消息从未到达目标,windows,docker,containers,msmq,Windows,Docker,Containers,Msmq,更新解决方案步骤: 我构建了一个虚拟控制台应用程序,它基本上只是从MSMQ读取和写入数据。主要问题是确保在目标服务器MSMQ队列本身上设置身份验证,您要从容器中连接到该队列。 因此,如果要从名为gw.in的专用队列读取数据并写入专用队列gw.out,则两个队列的用户权限“Everyone”和“ANONYMOUS LOGON”都需要设置为“FullControl”。现在docker容器可以按预期从队列中读写。 我遗漏的另一件小事是确保MSMQ路径名字符串的格式正确,例如 FORMATNAME:DI

更新解决方案步骤:

我构建了一个虚拟控制台应用程序,它基本上只是从MSMQ读取和写入数据。主要问题是确保在目标服务器MSMQ队列本身上设置身份验证,您要从容器中连接到该队列。 因此,如果要从名为gw.in的专用队列读取数据并写入专用队列gw.out,则两个队列的用户权限“Everyone”和“ANONYMOUS LOGON”都需要设置为“FullControl”。现在docker容器可以按预期从队列中读写。 我遗漏的另一件小事是确保MSMQ路径名字符串的格式正确,例如

FORMATNAME:DIRECT=TCP:{ip address}\private$\gw.in

(基本上与从一台服务器连接到另一台服务器时运行的情况相同。)


我现在唯一的问题是,这对于生产来说有多安全,因为这需要在某个时候推广到生产服务中

更新2:链接到工作示例应用程序和dockerfile

以防其他人也想玩

下面的原始帖子

我已经创建了一个Windows docker映像。创建容器时,将启动一个简单的应用程序服务,通过udp连接(9005)接收消息,执行一些数据操作,然后将结果写入MSMQ。(很遗憾,旧应用程序..即使我想删除MSMQ,也无法删除…)

现在,当连接到另一台服务器上的目标MSMQ队列时出现问题。 当我以交互方式运行容器时,我可以通过通常的powershell命令等跟踪数据进入并写入MSMQ Outqueue。这时,MSMQ告诉我它无法连接到目标,或者目标队列不存在,outqueue消息被丢弃并消失在空气中

# escape=`
FROM microsoft/windowsservercore:1803
RUN powershell -Command Enable-WindowsOptionalFeature -Online -FeatureName MSMQ-Server -All
COPY . C:\app
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
WORKDIR C:\app\Deployment
RUN .\deploy.ps1
EXPOSE 9005/udp 7998/tcp 1801/tcp 3527/udp 1801/udp 389/tcp 135/udp 135/tcp 2101/tcp 2103/tcp 2105/tcp
MSMQ端口符合

docker run命令示例(出于对多个-p映射等的不满,显然已经尝试过具体操作):

我已经更新了上面的dockerfile并多次运行cmd,使用不同的端口,公开端口,以及在运行容器时添加不同的变体。上面是我最后一次尝试所有端口。 但是,我无法使MSMQ从容器内写入目标MSMQ服务器队列。 我可以写入容器内的私有队列,但这显然是毫无意义的,因为容器不应该有状态,而应该只有处理器

谁能帮忙吗。我错过了什么。
谢谢

如果有人想要dockerfile等虚拟应用程序,我很乐意与大家分享。:)“我现在唯一的问题是,这对生产来说有多安全,因为在某个时候,这需要推广到生产服务中。”你说的“安全”是什么意思?队列上没有安全性,因此从这个角度来看是不安全的。@JohnBreakwell是的,我想这要归结为允许从队列中写入和读取。如果有人想要带有dockerfile等的虚拟应用程序,我很乐意分享它。:)“我现在唯一的问题是,这对生产来说有多安全,因为在某个时候,这需要推广到生产服务中。”你说的“安全”是什么意思?队列上没有安全措施,因此从这个角度来看是不安全的。@JohnBreakwell是的,我想这也要归结为允许从队列中写入和读取。
# escape=`
FROM microsoft/windowsservercore:1803
RUN powershell -Command Enable-WindowsOptionalFeature -Online -FeatureName MSMQ-Server -All
COPY . C:\app
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
WORKDIR C:\app\Deployment
RUN .\deploy.ps1
EXPOSE 9005/udp 7998/tcp 1801/tcp 3527/udp 1801/udp 389/tcp 135/udp 135/tcp 2101/tcp 2103/tcp 2105/tcp
docker run -it -p 9005:9005/udp -p 7998:7998 -p 9004:9004/udp -p 1801:1801 -p 389:389 -p 2101:2101 -p 2103:2103 -p 2105:2105  028cf678fec8