在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差异的参考链接