Cannot launch interactive session in Windows IIS Docker container
我正在使用AWS"Windows Server 2016 Base with Containers"图像(AMI-5E6BCE3E)。
使用
在PowerShell(以管理员身份运行)中,我可以在交互模式下成功运行"Microsoft/WindowsServerCore"容器,并连接到容器中的cmd:
1 | docker run -it microsoft/windowsservercore cmd |
当我尝试在交互模式下运行"Microsoft/IIS"容器时,尽管我能够(通过浏览器)连接到IIS,但我从未连接到容器中的交互命令会话。
1 | docker run -it -p 80:80 microsoft/iis cmd |
相反,我只是得到:
Service 'w3svc' started
使用另一个PowerShell窗口,我可以:
1 | docker container ls |
…看到我的集装箱在运行。
试图附加锁,但永远不会返回。
之后我切换了区域,发现每个区域上都有不同的AMI:
- 美国东部-1:AMI-D08EDFC7
- 美国西部-2:AMI-5E6BCE3E
…这两种方法都有相同的结果。
使用的相关链接:
- AWS公告和简单Docker示例
- msdn简单Docker示例
- msdn-iis-docker示例
更新
使用下面的链接,我可以基于服务器库创建自己的Dockerfile,并安装IIS,这看起来很好。
自定义Dockerfile
这不是AWS AMI的问题,这是因为Microsoft IIS Dockerfile是Docker新编写的。
链接到Microsoft的IIS Dockerfile
最后一行(第7行):
1 | ENTRYPOINT ["C:\\ServiceMonitor.exe","w3svc"] |
命令和入口点之间的差异
因此,由于此dockerfile使用entrypoint,要启动交互式PowerShell会话,请使用以下命令:
1 | docker run --entrypoint powershell -it -p 80:80 microsoft/iis |
请注意,似乎"-entrypoint"标志需要在运行之后,因为这不起作用:
1 | docker run -it -p 80:80 microsoft/iis --entrypoint powershell |
这里是另一个关于入口点和命令差异的参考链接