Сообщения очереди MSMQ контейнера Docker Windows никогда не достигают места назначения - PullRequest
0 голосов
/ 25 февраля 2019

ОБНОВЛЕНИЕ с шагами к решению:

Я создал фиктивное консольное приложение, которое в основном просто читает и пишет из MSMQ.Основная проблема заключалась в том, чтобы убедиться, что аутентификация установлена ​​на самих очередях MSMQ конечного сервера, к которым вы подключаетесь изнутри контейнера.Поэтому, если вы хотите читать из частной очереди gw.in и записывать в частную очередь gw.out, обе очереди должны иметь права пользователя " Everyone " и " ANONYMOUS LOGON"установлено значение" FullControl"для обеих очередей.Теперь контейнер Docker может читать и писать из очередей, как и ожидалось.Другая незначительная вещь, которую я пропустил, - это проверка правильности форматирования строки имени пути MSMQ, например,

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

или

FORMATNAME:DIRECT=OS:{dns name}\private$\gw.in

(в основном то же самое, что и из1 сервер подключается к другому.)

Единственная проблема, с которой я столкнулся сейчас, заключается в том, насколько это безопасно для производства, поскольку в какой-то момент его необходимо будет внедрить в производственные службы.

ОБНОВЛЕНИЕ 2: Ссылка на рабочий пример приложения и файла Dockerfile https://www.codeproject.com/Articles/1278439/Working-with-MSMQ-in-Windows-Docker-Containers

На случай, если кто-то еще захочет поиграть.

Оригинальный пост ниже

Я создал образ докера Windows.Простая служба приложений запускается при создании контейнера, получая сообщения по соединению udp (9005), выполняя некоторые манипуляции с данными и затем записывая результаты в MSMQ.(К сожалению, старое приложение .. Не могу удалить MSMQ, даже если бы я хотел ...)

Теперь проблема возникает при подключении к целевой очереди MSMQ на другом сервере.Когда я запускаю контейнер как интерактивный, я могу проследить с помощью обычных команд powershell и т. Д., Что данные поступают и записываются в очередь MSMQ.В этот момент MSMQ сообщает, что не может подключиться к пункту назначения, или очередь назначения не существует, и сообщения о очереди отбрасываются и исчезают в воздухе.

# 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-порты согласно https://support.microsoft.com/en-za/help/178517/tcp-ports-udp-ports-and-rpc-ports-that-are-used-by-message-queuing

Пример команды запуска Docker (из-за неудовлетворенности множественными сопоставлениями -p и т. Д., Очевидно, уже пробовал со спецификой):

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

Я обновлял вышеупомянутый dockerfile и много раз запускал cmd, играя с разными портами, открывая порты и при запуске контейнера добавляя различные отклонения.Выше - последний, где я попробовал все порты.Однако я не могу заставить MSMQ записывать в очереди сервера MSMQ назначения из контейнера в место назначения.Я могу писать в частную очередь внутри контейнера, но это, очевидно, бессмысленно, поскольку контейнер не должен иметь состояние, а только процессор ...

Может кто-нибудь помочь, пожалуйста.Чего мне не хватаетСпасибо

...