【发布时间】:2020-12-30 01:59:44
【问题描述】:
在我的windows 笔记本电脑上,我创建了一个Play 应用程序,如果我直接执行它的脚本,它运行良好。在本地机器上,我使用localhost:9000 URL 访问应用程序。
我现在已经创建了应用程序的Docker 图像并暴露了端口9000
#this docker file copies prod specific files to container, eg logback_prod.xml and application_prod.conf
FROM openjdk:8
#ENV APP_NAME myapp
#ENV APP_VERSION 1.0-SNAPSHOT
...
#entrypoint is deploy/....
EXPOSE 9000
ENTRYPOINT ...
但我无法访问localhost:9000 上的应用程序。我怀疑该映像可能在 docker 自己创建的其他 IP 上运行。
我说的对吗?如何通过容器访问我的应用程序?我不需要Kubernetes Services 等,因为我已经在另一台机器上进行了该设置。我的具体问题是如何直接访问docker 容器。
更新
我还尝试使用--network="host" 运行docker image 但这也不起作用
更新 2
根据以下建议,我执行了以下命令,但仍然无法访问应用程序。
docker run -p 9000:9000 --env-file env.txt imagename
我看到了痕迹
[debug] a.i.TcpListener - Successfully bound to /0.0.0.0:9000
[info] p.c.s.AkkaHttpServer - Listening for HTTP on /0.0.0.0:9000
docker ps -a 显示应用程序已通过端口绑定 0.0.0.0:9000->9000/tcp 启动
docker inspect 显示IP - "IPAddress": "172.17.0.2"
但是http://172.17.0.2:9000/ 上的Chrome 不起作用This site can’t be reached172.17.0.2
netstat -ab on cmd 显示 TCP 0.0.0.0:9000 LAPTOP-788I0GL1:0 LISTENING [com.docker.backend.exe]
【问题讨论】:
-
你是如何启动容器的?您应该能够连接到
docker run -p端口号;仅在 Dockerfile 中使用EXPOSE是不够的。容器专用 IP 地址是一个内部 Docker 实现细节,在许多常见情况下不起作用(来自不同的主机,如果 Docker 在 VM 中,在 MacOS 或 Windows 平台上),我不建议查找它。 -
最近,我做了
docker run -p 9000:9000 --env-file env.txt manuchadha25/mydockerimage。当我看到docker ps -a时,我可以看到0.0.0.0:9000->9000/tcp -
应用程序是否监听 127.0.0.1:9000(“仅限本地主机”)、0.0.0.0:9000(“所有接口”)或其他? (应该是 0.0.0.0 变种,并且端口号需要匹配第二个
-p端口。)你在使用 Docker Toolbox 吗? (这需要一个特殊的docker-machine ip地址,可能是192.168.99.100,而不是localhost。) -
Listening for HTTP on /0.0.0.0:9000
标签: docker