运行 docker 映像时无法访问 localhost:8080
Posted
技术标签:
【中文标题】运行 docker 映像时无法访问 localhost:8080【英文标题】:Can't reach localhost:8080 while running docker image 【发布时间】:2017-09-07 05:51:44 【问题描述】:我使用 gradle 开发了一个小型 Java 演示 Web 应用程序,我想用 WildFly 对其进行 dockerize。我已按照here 的指示进行操作。
Dockerfile
是:
FROM jboss/wildfly
MAINTAINER Me <me@qmail.com>
RUN /opt/jboss/wildfly/bin/add-user.sh admin Admin#70365 --silent
ADD build/libs/my-demo.war /opt/jboss/wildfly/standalone/deployments/
当我使用 Docker 启动映像并浏览 localhost:8080
或 localhost:9990
时,我得到一个 This site can’t be reached
。
然而,当我使用gradle appRun
时,我的应用程序在localhost:8080
上成功运行。
缺少什么?
我在 Windows 10 家庭版下。我在 Ubuntu 16 下尝试过另一台笔记本电脑并面临同样的问题。
【问题讨论】:
localhost 不能以这种方式工作。它将在您的 Window envi 上查找服务器,而不是进入正在运行的容器中。可以分享一下你使用的 docker run 命令吗? 我是docker run -it my-demo
可能存在一些问题。您可以将以下行添加到您的 docker 文件中,看看它是否有效:EXPOSE 8080 9990
【参考方案1】:
三件事:
第一
基础镜像 EXPOSE
s 只有端口 8080,所以要能够访问端口 9990,您需要将 EXPOSE 9990
添加到您的 Dockerfile 或将 --expose 9990
添加到您的 docker run
call。
第二 你没有发布你的命令行调用,所以我只能猜测,但你需要将容器端口映射到主机端口,例如(包括额外的暴露端口)
docker run --expose 9990 -p 9990:9990 -p 8080:8080 -it my-demo
第三次 如果您使用 docker-machine,就我记得的 Win 10 home 的情况而言,您的应用程序不会在 localhost 上,而是在 docker-machine VM 的 IP 上。你可以通过调用找出是哪个IP
docker-machine ip
在 linux 上,添加端口映射后,您的应用程序将位于 localhost:PORT。
【讨论】:
我已经成功运行docker-machine
,但我必须使用小写的IP。
+1 docker-machine ip
是我的解决方案。我按照这些说明进行操作:docs.microsoft.com/en-us/azure/container-instances/….以上是关于运行 docker 映像时无法访问 localhost:8080的主要内容,如果未能解决你的问题,请参考以下文章
无法运行 docker 映像 - app.jar 中没有主要清单属性 [重复]
无法使用 influxdb docker 映像中的“Influx”命令访问或创建数据库
连接到 docker-compose mysql 容器会拒绝访问,但运行相同映像的 docker 不会
为 Spring Boot 应用程序基于“openjdk:8-jdk-alpine”构建 docker 映像时无法运行“./mvnw clean install”