已启动的Web应用程序的Docker和http url

我想在Docker中运行我的Web应用程序(用java/scala编写)。 因此,我创build了下面的docker文件:

 FROM java ADD 0/backend-assembly-1.1.jar /app/backend-assembly-1.1.jar EXPOSE 80 ENTRYPOINT ["java", "-jar", "\/app\/backend-assembly-1.1.jar", "0.0.0.0", "80"] 

当我使用docker run命令运行应用程序时,应用程序确实成功启动:

 [DEBUG] [02/12/2017 21:28:56.940] [tkachuko-web-system-akka.actor.default-dispatcher-2] [akka://tkachuko-web-system/system/IO-TCP/selectors/$a/0] Successfully bound to /0:0:0:0:0:0:0:0:80 

我明白,在虚拟机上运行的docker图像,所以我决定找出虚拟机器的IP地址:

 docker inspect 7cf588493b41 | grep IP 

并返回"IPAddress": "172.17.0.2"

然而, 0.0.0.0localhost172.17.0.2都可以访问 ,但是当我运行没有docker(从命令行)的一切,一切工作。 你能否指定我的应用程序可以访问哪个地址?

以防万一:我正在使用OS X.

谢谢你的帮助。

要在Docker外使用,需要满足两个条件:

  1. 你暴露了图像中的端口(使用EXPOSE )。 看起来情况已经如此了。

  2. 将容器中的端口绑定到主机系统上的端口。 你没有包含你的运行命令,但它需要是这样的。

     docker run -d -p 8080:80 <image-name> 

这里的关键是-p标志,它将本地端口绑定到一个容器端口。

 -p local-port:container-port -p 80:80 # bind local port 80 to container's port 80 -p 8080:80 # bind local port 8080 to container's port 80 

如果您愿意,也可以将端口绑定到Mac的本地主机上。

 -p 127.0.0.1:8080:80 

在上述所有情况下,你已经绑定的本地端口现在应该在localhost上回答,即

HTTP://本地主机:8080 /