为了能够在Windows 2016主机上运行Linux容器,我们遵循了this tutorial。我们面临的问题是我们似乎无法启用The calling thread cannot access this object because a different thread owns it
功能。在docs中说:
要在Docker CLI中启用实验性功能,请编辑config.json文件并将实验性设置为启用。
文件experimental
:
C:\ProgramData\docker\config\config.json
重启Docker服务({
"experimental": "enabled",
"debug": true
}
并且运行Restart-Service docker
后,我们仍然看到标志docker info
:
Experimental: false
如何在Windows Server 2016上启用Docker实验功能?
即使我尝试设置environment variable并重新启动powershell和docker服务,它也不会在 Operating System: Windows Server 2016 Standard Version 1607 (OS Build 14393.3686)
OSType: windows
Architecture: x86_64
Docker Root Dir: C:\ProgramData\docker
Experimental: false
中注册:
docker info
使用[Environment]::SetEnvironmentVariable("DOCKER_CLI_EXPERIMENTAL", "enabled", "Machine")
登录docker后,文件“ C:\ Users \ bob \ .docker \ config.json”。添加密钥后,服务重启后仍未注册:
docker login
答案 0 :(得分:2)
您将配置放入名为 config.json 的文件中。但是根据docs正确的文件名是daemon.json。
配置文件的完整路径必须是:C:\ProgramData\docker\config\daemon.json
答案 1 :(得分:1)
我遵循了Windows上Canonical的Linux容器教程,并陷入了尝试获取正确的ubuntu(不是Windows的Linux)映像的问题(然后发现了有关设置实验性的问题)。如果您向dockerd.exe询问参数,它将接受(dockerd.exe --help)选项之一--experimental。
在dockerd调用上设置--experimental对我有用。
如果可以使用--experimental(而不是在配置文件中)配置守护程序的调用,则可以解决您的问题。
答案 2 :(得分:0)
尝试通过以下方式设置环境变量:
[Environment]::SetEnvironmentVariable("DOCKER_CLI_EXPERIMENTAL", "enabled")
这在我的Linux集群上有效,在其中指定用户或计算机似乎导致该变量被忽略。
答案 3 :(得分:0)
我发现它根本无法像here所述那样在Windows Server 2016上运行:
Docker桌面已经改变了利用WSL2在Windows 10上运行Linux容器的方式。Docker EE的计划尚不清楚,因为Docker Inc.已将其出售给Mirantis。 https://github.com/docker/for-win/issues/6470#issuecomment-633883063
因此,如果您打算在生产环境中同时运行Linux和Windows容器,则可能需要寻找其他选项,例如Kubernetes。
事实证明,Windows(lcow)服务器上的Linux容器是Windows Server版本1709和Docker EE的预览功能。 它不能在版本低于1709的Windows Server 2016上运行。