Docker.Dotnet 使用命名管道从容器内部访问 docker 引擎时出现 UnauthorizedAccessException

Docker.Dotnet UnauthorizedAccessException when accessing docker engine from inside a container using named pipes

我创建了一个 ASP.NET Blazor 服务器应用程序,它使用 Docker.DotNet 库查询 Docker 引擎。我将应用程序构建为 Docker Windows 容器映像,并在 运行 连接容器时映射命名管道 '\.\pipe\docker_engine'。在我的带有 docker 桌面的 Win10 开发机器上一切正常。我可以访问容器化的 Blazor 应用程序并从主机获取容器列表。

现在,当我尝试在 Windows Server 2019 VM 上 运行 此图像时,出现异常(来自容器内的 Blazor 应用程序):

System.UnauthorizedAccessException: Access to the path is denied.
 at System.IO.Pipes.NamedPipeClientStream.TryConnect(Int32 timeout, CancellationToken cancellationToken)
 ...

如果我直接在服务器上部署和 运行 Blazor 应用程序,它工作正常。 我也在服务器上 运行 Portainer 并且工作正常。

我是否需要在 Docker.DotNet 代码中配置一些特殊的东西才能让它在容器内部运行?

这是Docker.DotNet代码:

DockerClient client = new DockerClientConfiguration().CreateClient();
IList<ContainerListResponse> containers = await client.Containers.ListContainersAsync(
    new ContainersListParameters()
    {
        Limit = 100,
    });

这就是我启动容器的方式:

docker run -dt --restart=always -p 80:80 -e "ASPNETCORE_ENVIRONMENT=Production" --name DockerBlazor -v \.\pipe\docker_engine:\.\pipe\docker_engine dockerblazor:latest

欢迎任何想法:)

我明白了。 在 Dockerfile 中我需要添加

USER ContainerAdministrator

现在可以使用了。