通过VM在localhost上运行docker容器

时间:2017-07-31 05:58:21

标签: docker containers

我是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访问它。我知道端口转发不会转移到容器。任何帮助都会很棒,因为这个项目将在周二到期,这是完成之前的最后一个路障。

2 个答案:

答案 0 :(得分:3)

我发现以下帖子非常有用:How to connect to a docker container from outside the host (same network) [Windows]。按照以下步骤完美运行:

  1. 打开Oracle VM VirtualBox Manager
  2. 选择Docker使用的VM
  3. 点击设置 - >网络适​​配器1应该(默认?)是“附加 到:NAT“
  4. 点击高级 - >端口转发添加规则:协议TCP,主机端口 8080,访客端口8080(保留主机IP和访客IP为空)
  5. 您现在应该可以通过localhost:8080和your-internal-ip:8080浏览到您的容器。

    启动容器(Dockerfile EXPOSES 5000): docker run -p 8080:5000 -it jwarren:project

    能够与http://localhost:8080

    联系

答案 1 :(得分:0)

使用VM网络时,需要考虑的事情很少。

Virtual Box有3种类型的网络选项NAT,Bridged和Host Only。

  • NAT允许您的VM通过互联网访问互联网。但是不允许你的HOST机器访问VM
  • 仅限主机网络将创建一个网络,其中VM可以到达主机,主机可以到达VM。没有使用此网络的互联网
  • 桥接网络将允许您的VM从您的Wifi路由器或主网络分配另一个IP。此IP将允许VM具有网络访问权限以及对网络上其他计算机的访问权限。这将允许甚至主机到达IP

现在,在大多数情况下,当您想要在VM中运行Docker并使用主机访问该VM时,您希望VM同时拥有NAT和仅限主机的网桥

现在,在端口8342上访问您的应用只需要检查一些内容

  • seliunx,firewalld,ufw在您的VM上被禁用(或正确配置为允许该端口)
  • 您的VM只有主机网络或桥接网络
  • 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

上访问该应用