我是Docker和Containers的新手,我试图在容器中运行一个简单的asp.net Web应用程序但遇到问题。我的操作系统是Windows 10 Home,所以我必须使用Docker Toolbox,它运行在只包含基本Linux操作系统的VM上。当我启动容器时,它似乎开始很好,但我无法在localhost上查看该应用程序。
$ docker run -p 8342:5000 -it jwarren:project
托管环境:生产 内容根路径:/ app 现在听:http:// *:5000 申请开始了。按Ctrl + C关闭。
$ docker ps -a 集装箱ID图像命令创建状态端口名称 98cc4aed7586 jwarren:project" dotnet run" 8分钟前上涨8分钟0.0.0.0:8342->5000/tcp naughty_brattain
我尝试了几种不同的建议,我在网上找到了,但到目前为止还没有任何建议。但是,我对网络的了解非常有限,所以也许我还没有完全理解需要做什么。我尝试使用默认的VM机器IP和容器IP访问它。我知道端口转发不会转移到容器。任何帮助都会很棒,因为这个项目将在周二到期,这是完成之前的最后一个路障。
答案 0 :(得分:3)
我发现以下帖子非常有用:How to connect to a docker container from outside the host (same network) [Windows]。按照以下步骤完美运行:
您现在应该可以通过localhost:8080和your-internal-ip:8080浏览到您的容器。
启动容器(Dockerfile EXPOSES 5000): docker run -p 8080:5000 -it jwarren:project
联系答案 1 :(得分:0)
使用VM网络时,需要考虑的事情很少。
Virtual Box有3种类型的网络选项NAT,Bridged和Host Only。
现在,在大多数情况下,当您想要在VM中运行Docker并使用主机访问该VM时,您希望VM同时拥有NAT和仅限主机的网桥
现在,在端口8342
上访问您的应用只需要检查一些内容
iptables -S
不应显示REJECT规则某些虚拟机预先配置为仅允许来自外部网络的端口22。因此,您应尝试访问<hostonlyip>:8342
或<bridgedip>:8342
上的应用。
如果您想测试应用程序是否已启动,您可以执行以下操作
docker inspect <containerid> | grep IPA
从中获取IP并运行命令
curl http://<containerip>:5000/
此命令需要在VM内执行,而不是在您的机器上执行。如果此命令不起作用,那么您的容器不会在5000上侦听。有时,app只会在容器内侦听127.0.0.1
。这意味着它们只能在容器内部而不能在外部工作。容器内的应用需要收听0.0.0.0
如果没有任何作用,您可以尝试使用ssh隧道方法
ssh -L 8342:127.0.0.1:8342 user@<VMIP>
然后您应该可以在localhost:8342