如何将TCP套接字的KeepAliveValues放在docker中,即使是在Windows环境中?

cnjp1d6j  于 2022-11-03  发布在  Docker
关注(0)|答案(1)|浏览(172)

我正在开发我的第一个Docker应用程序,我想配置KeepAlive设置。在旧的Windows环境中,这是这样工作的:

[SupportedOSPlatform("windows")]
public static void ... (...)
{
    Socket socket = ...;
    bool useKeepAlive = ...;
    int keepAliveInterval = ...;
    int retryInterval = ...;

    byte[] KAValues = new byte[size * 3];
    Array.Copy(BitConverter.GetBytes(on), 0, KAValues, 0, size);
    Array.Copy(BitConverter.GetBytes(keepAliveInterval), 0, KAValues, size, size);
    Array.Copy(BitConverter.GetBytes(retryInterval), 0, KAValues, size * 2, size);

    socket.IOControl(IOControlCode.KeepAliveValues, KAValues, null);
...

当尝试在基于停靠的应用程序中执行此代码时,最后一行将生成PlatformNotSupportedException
编译器(实际上是intellisense)在IOControlCode.KeepAliveValues部分生成了一个警告CA1416,指出这段代码在Windows上是受支持的。现在我确实在Windows机器上工作,但我相信基于Docker的环境会把这件事搞砸。

Edit1:我已经在函数声明之前添加了“属性”[SupportedOSPlatform("windows")],但这并没有解决问题。
编辑2

我看了一下我的项目文件,在那里我发现了以下条目:

<PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <UserSecretsId>7505f631-669c-4db7-ay10-4fc92e9b4b79</UserSecretsId>
    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
    <DockerfileContext>..\..\..</DockerfileContext>
    <DockerComposeProjectPath>..\..\docker-compose.dcproj</DockerComposeProjectPath>
  </PropertyGroup>

正如您所看到的,“DockerDefaultTargetOS”似乎是“Linux”,而我使用的是Windows机器。
有没有解决的办法?

kgsdhlau

kgsdhlau1#

在WSL 2中,Linux Docker容器运行在虚拟化的Linux内核之上,而不是像在WSL 1中那样运行在Windows内核之上。因此,这就像在Hyper-V虚拟机中安装Linux并在Linux虚拟机上运行Docker一样。

相关问题