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

6

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

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

从PowerShell(以管理员身份运行)中,我可以成功地在交互模式下运行“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

尝试连接容器时会挂起且永远不会返回。

我后来切换了区域,发现每个区域都有不同的AMI:

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

这两者的结果相同。

相关链接:

更新

使用以下链接,我能够创建一个基于服务器基础镜像的自定义Dockerfile,并安装IIS,这似乎可以正常工作。

自定义Dockerfile

1个回答

13
这不是AWS AMI的问题,而是由于Microsoft IIS Dockerfile书写方式问题/对Docker不熟悉所致。 Microsoft的IIS DockerFile链接 最后一行(第7行):
ENTRYPOINT ["C:\\ServiceMonitor.exe", "w3svc"]

CMD与ENTRYPOINT在Dockerfile中的区别

因此,由于该Dockerfile使用ENTRYPOINT,在启动交互式powershell会话时,请使用以下命令:

docker run --entrypoint powershell -it -p 80:80 microsoft/iis
注意,看起来“--entrypoint”标志需要在run之后,否则这将不起作用:
docker run -it -p 80:80 microsoft/iis --entrypoint powershell

这是另一个关于ENTRYPOINT和CMD区别的参考链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接