在Windows Server 2016上运行Linux Docker容器

17

如何在Windows Server 2016上运行Linux Docker容器?使用Docker for Windows在Windows 10中很容易做到。唯一的方法是安装Docker工具箱并完全忽略内置容器功能吗?


你解决了这个问题吗? - David Pilkington
5个回答

8

在W2016上使用Linux容器是可能的,但需要一些技巧。用户“Algore”在这里描述了它,但我当然已经将其复制到这个答案中。

  • 下载“Docker for Windows”:https://docs.docker.com/docker-for-windows/

  • 在Windows 10 Pro上安装“Docker for Windows”。

  • 将Windows 10机器上的C:\Program Files\Docker复制到您的Server 2016盒子上的C:\Program Files

  • 在W2016盒子上运行install-windowsfeature hyper-v,containers

  • 将这些注册表项复制到文件并在Server 2016盒子上导入它们(reg import):

---START---
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Docker Inc.] [HKEY_LOCAL_MACHINE\SOFTWARE\Docker Inc.\Docker] [HKEY_LOCAL_MACHINE\SOFTWARE\Docker Inc.\Docker\1.0] "AppPath"="\"C:\Program Files\Docker\Docker\Docker for Windows.exe\"" "BinPath"="\"C:\Program Files\Docker\Docker\resources\bin\""

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\DockerService]
"EventMessageFile"=hex(2):43,00,3a,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,\ 00,73,00,5c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,2e,00,\ 4e,00,45,00,54,00,5c,00,46,00,72,00,61,00,6d,00,65,00,77,00,6f,00,72,00,6b,\ 00,36,00,34,00,5c,00,76,00,34,00,2e,00,30,00,2e,00,33,00,30,00,33,00,31,00,\ 39,00,5c,00,45,00,76,00,65,00,6e,00,74,00,4c,00,6f,00,67,00,4d,00,65,00,73,\ 00,73,00,61,00,67,00,65,00,73,00,2e,00,64,00,6c,00,6c,00,00,00

该段文本是一个注册表键值,它的作用是指定Docker服务的事件消息文件路径。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\com.docker.service] "Type"=dword:00000010 "Start"=dword:00000002 "ErrorControl"=dword:00000000 "ImagePath"=hex(2):22,00,43,00,3a,00,5c,00,50,00,72,00,6f,00,67,00,72,00,61,00,\ 6d,00,20,00,46,00,69,00,6c,00,65,00,73,00,5c,00,44,00,6f,00,63,00,6b,00,65,\ 00,72,00,5c,00,44,00,6f,00,63,00,6b,00,65,00,72,00,5c,00,63,00,6f,00,6d,00,\ 2e,00,64,00,6f,00,63,00,6b,00,65,00,72,00,2e,00,73,00,65,00,72,00,76,00,69,\ 00,63,00,65,00,22,00,00,00
"DisplayName"="Docker for Windows Service"
"ObjectName"="LocalSystem"
"Description"="运行 Docker for Windows 后端服务"
---END---

你可以将条目添加到currentversion\run或计划任务中,如果想要docker for windows.exe自动启动。
重新启动计算机并运行PowerShell脚本C:\Program Files\Docker\Docker\Resources\mobylinuxvm.ps1 -Create 查看此ps1文件并注意您可以设置各种选项。请参考这些网站:

https://docker-saigon.github.io/post/Docker-Beta/
https://jpetazzo.github.io/2013/10/16/configure-docker-bridge-network/

  • 在启动 C:\Program Files\Docker\Docker for Windows.exe 之前,确保 Docker 服务 com.docker.servicestart-service com.docker.service)正在运行。

如果您在 Server Core 上运行且没有托盘图标,在启动后出现通知时,单击“更改隐私设置”以进入设置(或修改 programdata 中的 json 文件)。

如果在尝试构建和重建时遇到问题,请查看 C:\Program Files\Docker\Docker\Resources\forceremovedocker.ps1 文件以获取要删除的设置的位置,例如在 C:\programdata 中。我建议不要运行该脚本,因为它会删除所有与 Docker 相关的内容。只需使用其中的部分即可。


1
我按照步骤操作成功在Windows上运行了Docker,但是由于某些原因bin路径没有被识别,我无法在命令提示符中运行“docker”或“docker-compose”。除非我明确地导航到该文件夹,否则这些命令都无法被识别。有什么想法吗? - chvndb
1
CLI工具是单独安装的。Docker Engine 发布版和Docker Compose 发布版可在GitHub上获取。 - Boggin
1
你说的“单独安装”是什么意思?CLI工具已经作为Docker for Windows安装的一部分,位于“C:\Program Files\Docker\Docker\resources\bin\”下。最后,我只需将bin文件夹添加到我的$PATH环境变量中即可。现在可以正常使用了。 - chvndb
现在Docker Desktop使用WSL,不支持Windows Server 2016(没有mobylinuxvm.ps1文件,也没有iso文件)。 - rominokun

5
根据 Stefan Scherer 的 这篇文章,在 Server 2016 上运行 Linux 容器是可能的。以下是具体步骤:

Create a Linux Docker machine in Hyper-V

If you want to try out multi architecture you also use docker-machine to create a Linux Docker Engine running in Hyper-V. I have prepared a script that will set up everything as there are some known issues.

C:\vagrant\scripts\create-hyperv-linux-docker-machine.ps1

This PowerShell script creates a Docker machine and updates Docker Engine to the latest so that the Windows Docker client is able to communicate with the Linux Docker Engine.

Use the Linux Docker machine

Open a PowerShell terminal as an administrator and select the Linux Docker machine with

docker-machine env --shell powershell | iex

Now run your first busybox container with

docker run -it busybox uname -a

你是指Windows Server 2016的哪个版本?我希望你指的是1609版。 - basickarl
此脚本在PowerShell中出现错误:grep:未将术语“grep”识别为cmdlet的名称。 - basickarl

4
很遗憾,目前不可能轻松安装“Docker for Windows”工具。此安装程序提供了一个名为MobyLinux的轻量级虚拟机,可以在Windows Server 2016上运行Linux容器。您可以在Docker论坛上找到一个“hacky install attempt”(我没有尝试过)的链接。(链接) 关于“Docker for Windows”的内部运作情况,有一次很好的讨论可供参考。

现在是可以的,虽然安装不简单。请参见以下答案 - Boggin
1
@Boggin 这就是我在回答中提到的“hacky install attempt”。 - William Denman

1
以下内容在 Windows Server 2016 build 14393.693 (2017年1月) 上运行正常,无需hacky的解决方法。
可能适用于更高/更低版本的Windows Server 2016,但我尝试在最近更新的版本上复制它,结果失败了!感觉这个漏洞必须被修补!
下载 Docker Community Edition 2.0.0.3 2019-02-15
链接: https://download.docker.com/win/stable/31259/Docker%20for%20Windows%20Installer.exe 所有版本页面: https://docs.docker.com/docker-for-windows/release-notes/ 只需将文件下载/复制到 Windows Server 2016 机器并运行即可。
它也可以离线运行用于空气隔离系统。
在安装期间取消选中 "使用Windows容器"。默认未选中。
安装后会收到一条消息,提示 Windows 的某些功能已被弃用。点击“确定”。
enter image description here
注销并重新登录。
如果您还没有安装 Hyper-V,它会自动提示您进行安装。允许它完成并重启。现在您可以使用了。如果无法切换到 Linux,则可能需要再次重启。
我通过运行多个 Linux 容器进行了测试,它可以正常工作。如果我漏掉了什么,请分享给其他人受益。缺点是您不能升级到更高版本的 Docker。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接