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

时间:2017-02-12 21:47:41

标签: scala docker

我想在docker中运行我的Web应用程序(用java/scala编写)。因此,我创建了以下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.

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

  1. 您在图像中公开了端口(使用EXPOSE)。看起来已经是这样了。

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

    docker run -d -p 8080:80 <image-name>
    
  3. 这里的关键是-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://localhost:8080/