Docker容器问题(启动/停止和WebAPI访问)

时间:2018-06-21 12:12:33

标签: c# docker asp.net-web-api docker-for-windows

同事, 我很难运行自己创建的Docker映像。我要容器化的应用程序是一个简单的Windows服务,该服务通过某些端口公开了WebAPI(REST)。它只能在本地正常工作,但不能在容器中工作。我面临以下两个问题:

  • 当我运行容器时,它将启动并在大约20秒停止。我认为可能是由于容器的“性质”(如果仍然如此),即如果没有运行的活动进程,它将自动停止。这样对吗?我找到了一个很好的PS脚本来完成这项工作。即验证服务是否正在运行,并且该服务一直运行到服务运行为止。唯一的问题,我无法将其安装到映像中。命令:CMD ["powershell wait-service.ps1 -ServiceName SelfHostService"]不起作用,因为Docker不喜欢我尝试提交的参数。有什么想法可以解决这个问题吗?
  • 另一个问题,当服务运行时间很短时,原来我无法访问它,即一旦容器启动并运行,我就从邮递员'localhost:8080 / api /提交以下请求Welcome /”,它返回“ HTTP错误403。请求的URL禁止”,而在本地运行良好。关于在容器中托管此类东西有什么陷阱吗?

1 个答案:

答案 0 :(得分:0)

是的,当前台进程退出时,docker容器将退出。如果未运行,则docker会认为该应用程序已停止并关闭了容器。

您没有正确将参数传递给CMD命令,有关更多信息,请参见docs。文档中的一些示例

CMD ["executable","param1","param2"] (preferred form)
CMD ["param1","param2"] (ad default parameters to ENTRYPOINT)
CMD  command param1 param2 (shell form)

我认为您正在尝试从主机而非容器访问localhost:8080/api/welcome。您只能从容器内部访问localhost。您可以通过以交互方式运行容器(使用-it标志)然后访问localhost来做到这一点。 如果要从主机访问容器,则需要先EXPOSE 8080中的端口docker image,然后publish port 8080。这样,您可以使用http://your_hostname:8080/api/welcome访问api(假设您在8080上发布了8080端口,例如,使用标志-p 8080:8080