在Windows IIS Docker容器中无法启动交互式会话

我正在使用AWS“Windows Server 2016 Base with Containers”映像(ami-5e6bce3e)。

使用docker info我可以确认我有最新的(服务器版本:1.12.2-cs-ws-beta)。

从Powershell(以Admin身份运行)我可以成功运行交互模式下的“microsoft / windowsservercore”容器,连接到容器中的CMD:

 docker run -it microsoft/windowsservercore cmd 

当我尝试以交互模式运行“microsoft / iis”容器时,虽然我能够连接到IIS(通过浏览器),但我从来没有连接到容器中的交互式CMD会话。

 docker run -it -p 80:80 microsoft/iis cmd 

相反,我只是得到:

服务'w3svc'开始

使用另一个Powershell窗口,我可以:

 docker container ls 

…并看到我的容器运行。

试图附加locking,永远不会返回。

我已经转换区域,发现每个区域都有不同的AMI:

  • us-east-1:ami-d08edfc7
  • us-west-2:ami-5e6bce3e

…这两个都有相同的结果。

使用的相关链接:

  • AWS公告和简单的Docker例子
  • MSDN简单的Docker例子
  • MSDN IIS Docker示例

更新

使用下面的链接,我能够创build自己的Dockerfile基于服务器基础和安装IIS,这似乎工作正常。

自定义Dockerfile

这不是AWS AMI的问题,这是由于Microsoft IIS Dockerfile写入/新增到Docker的方式所致。

链接到微软的IIS DockerFile

最后一行(第7行):

 ENTRYPOINT ["C:\\ServiceMonitor.exe", "w3svc"] 

CMD和进入点之间的区别

因此,由于此Dockerfile使用ENTRYPOINT来启动交互式PowerShell会话,请使用以下命令:

 docker run --entrypoint powershell -it -p 80:80 microsoft/iis 

请注意,“–entrypoint”标志似乎需要在运行后,因为这不会工作:

 docker run -it -p 80:80 microsoft/iis --entrypoint powershell 

这里是另外一个关于ENTRYPOINT和CMD差异的参考链接