【问题标题】:Unable to connect with container at address /0.0.0.0:9000无法连接地址 /0.0.0.0:9000 的容器
【发布时间】:2020-06-02 06:12:38
【问题描述】:

我的containerplay/scala 应用程序从[info] p.c.s.AkkaHttpServer - Listening for HTTP on /0.0.0.0:9000 开始。但我无法从浏览器连接到它。使用Docker for Windows 构建映像后,我正在我的 Windows 机器上运行容器。

Dockerfile

FROM openjdk:8
WORKDIR deploy
COPY target/universal/myapp-1.0.zip .

COPY conf/logback_dev.xml ./logback.xml
COPY conf/application_dev.conf ./application.conf
RUN unzip myapp-1.0.zip
RUN chmod +x myapp-1.0/bin/myapp
EXPOSE 9000
ENTRYPOINT myapp-1.0/bin/myapp -Dplay.http.secret.key=changemeplease -Dlogger.file=/deploy/logback.xml -Dconfig.file=/deploy/application.conf

我以docker run myApp -p 9000:9000 -network="host" 启动容器,还尝试了docker run myApp -p 9000:9000 -network="host"

更新

这很有趣。 如果我在端口之前指定图像名称,则应用程序无法访问

docker run  myApp -p 9000:9000

docker container ps -a 中,我看到了(没有 localhost:9000 到 9000 的映射)

C:\Users\manuc>docker container ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                NAMES
4d16547cd96d        myApp   "/bin/sh -c 'myApp…"   10 seconds ago      Up 9 seconds        9000/tcp, 9042/tcp   ecstatic_bell

但如果我在图像名称之前指定端口,则应用程序是可访问的

docker run  -p 9000:9000 myApp

docker container ps -a 中,我看到了 localhost:9000 -> 9000 的映射

C:\Users\manuc>docker container ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                              NAMES
24b571cc0057        myApp   "/bin/sh -c 'MyApp…"   39 seconds ago      Up 38 seconds       0.0.0.0:9000->9000/tcp, 9042/tcp   silly_yalow

【问题讨论】:

  • 您是否将公开端口参数提供给“docker run”命令?
  • 您是否将容器的 9000 端口映射到主机中的 9000 端口?
  • 您可以尝试docker exec -it <container-id> bashcurl 0.0.0.0:9000 看看您是否在容器内收到了结果。如果您可以访问容器内的端口 9000,它应该可以工作。
  • 你能试试这样吗:docker run -p 9000:9000 myApp。主机网络在 Windows 上不起作用。您必须在docker run 命令上的图像名称之前定义端口映射。
  • @ManuChadha 检查docs。格式为docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]。图像名称之后的任何内容都作为参数传递给入口点。

标签: docker playframework-2.6


【解决方案1】:

当您的容器行为不符合您的预期时要执行的操作:

  • 检查您的应用程序是否正在您的计算机中运行。

  • 运行容器后,使用docker ps 检查它是否正常。如果它不健康,则问题通常出在您的应用程序中。

  • 确保它运行时没有错误,使用docker logs <container-id> 检查日志。如果日志正常,则问题通常出在容器网络配置中。

  • 确保您可以使用docker exec -it <container-id> bash 访问您的应用程序。并尝试使用curlwget 访问端口。如果无法访问,问题可能出在 iptables、防火墙或您的应用程序中。

  • 如果您可以确保上述所有步骤按预期工作。问题出在 docker 网络配置中。

Docker 网络主机仅适用于 linux,不适用于 mac 和 windows。您可以使用docker run -p 9000:9000 myapp 运行容器。结帐文档:https://docs.docker.com/network/host/#:~:text=The%20host%20networking%20driver%20only,the%20docker%20service%20create%20command


docker run 命令的一般形式是docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...],如您在documentation 中所见。您需要在图像名称之前指定端口选项。

【讨论】:

  • 请参阅问题中的更新。我不明白为什么订单很重要
  • 我输入了docker run 命令错误,抱歉。我更新了答案,您可以查看文档以了解参数的顺序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 2016-11-11
  • 1970-01-01
  • 2019-06-12
  • 2020-05-16
  • 1970-01-01
相关资源
最近更新 更多