我已经在 Windows 2019 Server 上安装了 Docker,但我只能从管理 shell 与其交互

Posted

技术标签:

【中文标题】我已经在 Windows 2019 Server 上安装了 Docker,但我只能从管理 shell 与其交互【英文标题】:I've installed Docker on Windows 2019 Server, but I can only interact with it from an administrative shell 【发布时间】:2021-05-06 11:36:30 【问题描述】:

我一直在关注these instructions,以便在全新的 Windows 2019 Server 上安装 Docker。

只要我使用管理帐户,我就可以登录并运行我想要的任何东西:

C:\Windows\system32>docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

但是,如果我尝试从非管理员 shell 运行相同的命令,我会收到以下错误消息:

C:\Users\sysUKNG>docker run helloworld docker: 连接时出错: 发布 http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.40/containers/create: 打开 //./pipe/docker_engine: 访问被拒绝。在默认守护进程中 在 Windows 上配置,docker 客户端必须运行提升到 连接。这个错误也可能表明 docker daemon 不是 跑步。请参阅“docker run --help”。

Microsoft 是否希望 Docker 用户仅通过提升的帐户与 Docker 守护程序交互?如果你假设 Docker 的目的是运行持久的服务器,我想这是有道理的。合乎逻辑的是,您只希望管理员能够启动和停止这些事情。

但是,我正在尝试运行大量由非管理服务帐户运行的调度程序触发的批处理进程。我真的不希望我的调度程序必须运行提升。

在 Docker for Linux 中,我可以让任何想要访问 Docker 的用户成为“docker-users”组的一部分。 Windows 是否具有允许任何用户进行此类访问的等效方法?我的服务器没有具有相似名称的组,但我确实有“Hyper-V 管理员”,它说它为帐户提供“完全且不受限制的访问”,这不是我想要的。

理想情况下,我希望特定用户组能够启动和停止在 Windows 容器内的 Docker for Windows 上运行的进程。

This page suggests 该解决方案与打开 TCP 端口有关,但我使用的是 Windows Server 版本的 Docker。它没有与 Docker Desktop for Windows 一样的控制面板。

Another page suggests 我只能从提升的 shell 运行 Docker 命令?我也想从 Jenkins 作业中运行一些 Docker 的东西。

【问题讨论】:

【参考方案1】:

创建一个组“docker-users”。每次重启后都需要运行。

$account="MY-SERVER-NAME\docker-users"
$npipe = "\\.\pipe\docker_engine"
$dInfo = New-Object "System.IO.DirectoryInfo" -ArgumentList $npipe
$dSec = $dInfo.GetAccessControl()
$fullControl =[System.Security.AccessControl.FileSystemRights]::FullControl
$allow =[System.Security.AccessControl.AccessControlType]::Allow
$rule = New-Object "System.Security.AccessControl.FileSystemAccessRule" -ArgumentList $account,$fullControl,$allow
$dSec.AddAccessRule($rule)
$dInfo.SetAccessControl($dSec)

我想我从这里抓住了这个想法:https://dille.name/blog/2017/11/29/using-the-docker-named-pipe-as-a-non-admin-for-windowscontainers/

【讨论】:

以上是关于我已经在 Windows 2019 Server 上安装了 Docker,但我只能从管理 shell 与其交互的主要内容,如果未能解决你的问题,请参考以下文章

如何在 IIS windows server 2019 中增加 post 请求的加载时间

Windows Server 2019 SSH Server

获取附加到 Windows Server 2019 的磁盘的序列号

在 Docker 容器中的 Server Core 2019 上安装 SQL Server LocalDB

windows server 2022激活码可以激活2019吗?

windows server 2019 hyper-v Failover Cluster