我想在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.0
,localhost
或172.17.0.2
都无法访问,但是当我运行没有docker(从命令行)的所有内容时,一切都可以正常运行。 您能否指定我的应用程序可以访问哪个地址?
以防万一:我使用的是OS X.
感谢您的帮助。
答案 0 :(得分:1)
要在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上应答,即