已启动的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.0
, localhost
或172.17.0.2
都可以访问 ,但是当我运行没有docker(从命令行)的一切,一切工作。 你能否指定我的应用程序可以访问哪个地址?
以防万一:我正在使用OS X.
谢谢你的帮助。
要在Docker外使用,需要满足两个条件:
-
你暴露了图像中的端口(使用
EXPOSE
)。 看起来情况已经如此了。 -
将容器中的端口绑定到主机系统上的端口。 你没有包含你的运行命令,但它需要是这样的。
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 /