Linux容器中的自定义命名管道-适用于Windows的Docker

时间:2018-06-25 14:12:31

标签: c# docker .net-core

最近,我一直在努力应对docker在网络上的性能不佳的问题,总的来说,与Docker在通过容器的任何通信中引起的延迟有关。

我的情况是这样的:

我有3个互相通信的容器,其中一个(“管理”容器)也通过端口绑定与外部通信,并公开了一些服务以对内部容器进行测试。 对于内部-外部通信,我已经有了一个解决方案(即使我仍在寻找更好的东西,使用桥接网络也可以),但是我真正关心的是容器内通信。

所以这是问题: 我想使用this example provided by Microsoft尝试在Windows主机下的Linux docker容器内的.net核心中使用命名管道。 我使用的是docker-compose,因此我首先假设将npipe作为卷添加会成功,但是我遇到了一些问题。

使用此dockerfile:

version: '3.4'

services:
  netcorepipetest.server:
    image: netcorepipetestserver
    build:
      context: .
      dockerfile: NetCorePipeTest.Server/Dockerfile
    volumes:
     - //./pipe/PipeName://./pipe/PipeName

  netcorepipetest.client:
    image: netcorepipetestclient
    build:
      context: .
      dockerfile: NetCorePipeTest.Client/Dockerfile
    volumes:
     - //./pipe/PipeName://./pipe/PipeName

并像下面这样稍微修改源代码示例:

服务器部分

发件人:

 NamedPipeServerStream pipeServer =
            new NamedPipeServerStream("testpipe", PipeDirection.InOut, numThreads);

  NamedPipeServerStream pipeServer =
                new NamedPipeServerStream(@"\\.\pipe\PipeName", PipeDirection.InOut, numThreads);

客户部分

发件人

 NamedPipeClientStream pipeClient =
                    new NamedPipeClientStream(".", "testpipe",
                        PipeDirection.InOut, PipeOptions.None,
                        TokenImpersonationLevel.Impersonation);

 NamedPipeClientStream pipeClient =
                new NamedPipeClientStream(@"\\.\pipe\PipeName");

我收到此错误:

 Cannot create container for service netcorepipetest.client: b'Mount denied:\nThe source path "\\\\\\\\.\\\\pipe\\\\PipeName://./pipe/PipeName"\nis not a valid Windows path'

好吧,在那之后,我在google上搜索了一下,目的是当我偶然发现github问题(我不太记得如何再次找到它)时变得更加困惑,其中有人提到也许使用了长语法。撰写文件将完成某些操作。更新撰写文件后,将卷行替换为:

volumes:
      - type: tmpfs
        #source: \\.\pipe\PipeName
        target: \\.\pipe\PipeName

在构建过程中我不再遇到错误,但是在执行阶段,应该发生的一切都没有发生。服务器只是挂在那儿什么也没做,而客户端跟进。我究竟做错了什么?在Linux主机上更简单吗?

还是使用自定义命名管道的可能性只是我的幻想?

P.s。 (我使用tmpfs作为类型,因为bind就像以前一样,会出错)

版本和工具:

  • Docker版本:适用于Windows 18.03.1-ce的Docker
  • Linux容器
  • 主机操作系统 。: Windows 10 Pro(64位)
  • .net核心版本:2.1
  • Visual Studio 2017 作为IDE

请,如果您需要更多详细信息,请不要害怕询问!

0 个答案:

没有答案