运行 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:8080localhost: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】:

三件事:

第一 基础镜像 EXPOSEs 只有端口 8080,所以要能够访问端口 9990,您需要将 EXPOSE 9990 添加到您的 Dockerfile 或将 --expose 9990 添加到您的 docker runcall。

第二 你没有发布你的命令行调用,所以我只能猜测,但你需要将容器端口映射到主机端口,例如(包括额外的暴露端口)

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-无法访问 jar 文件 [关闭]

在没有 root 访问权限的系统上构建 Docker 映像

无法运行 docker 映像 - app.jar 中没有主要清单属性 [重复]

无法使用 influxdb docker 映像中的“Influx”命令访问或创建数据库

连接到 docker-compose mysql 容器会拒绝访问,但运行相同映像的 docker 不会

为 Spring Boot 应用程序基于“openjdk:8-jdk-alpine”构建 docker 映像时无法运行“./mvnw clean install”