这有效:
docker run -it mcr.microsoft.com/windows:20H2 --isolation=hyperv
我获得了容器的 CLI,一切都很好。
这不起作用:
docker run -it mcr.microsoft.com/windows:20H2 --isolation=hyperv --name=workstation_1
当我添加--name=workstation_1
参数时,根据其docker run --help
是有效参数:
我收到此错误:
docker: Error response from daemon: container 1118d316b0700307943bec10392b39266b79db08350311618fb5bfc247e2fa8d encountered an error during hcsshim::System::CreateProcess: failure in a Windows system call: The system cannot find the file specified. (0x2)
[Event Detail: Provider: 00000000-0000-0000-0000-000000000000]
[Event Detail: Provider: 00000000-0000-0000-0000-000000000000]
[Event Detail: onecore\vm\compute\management\orchestration\vmhostedcontainer\processmanagement.cpp(173)\vmcomputeagent.exe!00007FF6EBB1A40B: (caller: 00007FF6EBAD5C8B) Exception(1) tid(398) 80070002 The system cannot find the file specified.
CallContext:[\Bridge_ProcessMessage\VmHostedContainer_ExecuteProcess]
Provider: 00000000-0000-0000-0000-000000000000].
我是否误用了 --name 参数?我还应该如何命名我的容器?我正在编写脚本,因此需要一种无需人工干预的(实用)方法来执行此操作。
我可以列出容器,假设列表中的第一个是新的,然后使用docker rename
,但出于显而易见的原因,对于自动构建管道使用该方法似乎是不可取的。
作为替代方案,我尝试了:
docker create mcr.microsoft.com/windows:20H2 --name=workstation_1
和
docker create mcr.microsoft.com/windows:20H2 --name="workstation_1"
由于docker create --help
表明这也是一个有效的论点:
这并没有失败,但它也没有命名容器。
答案1
请注意帮助信息的第一部分:
$ docker run --help
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
图像名称后的所有内容都会覆盖该命令的默认命令和参数。因此
docker run -it mcr.microsoft.com/windows:20H2 --isolation=hyperv --name=workstation_1
将运行启动一个带有-it
选项的容器,在基于镜像的容器中mcr.microsoft.com/windows:20H2
运行命令--isolation=hyperv --name=workstation_1
。要修复此问题,请将这些选项放在镜像名称之前:
docker run -it --isolation=hyperv --name=workstation_1 mcr.microsoft.com/windows:20H2