无法连接地址为 /0.0.0.0:9000 的容器

Unable to connect with container at address /0.0.0.0:9000

我的 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 ps 检查它是否健康。如果它不健康,问题通常出在您的应用程序中。

  • 确保 运行ning 没有错误,用 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 中所见。您需要在图像名称之前指定端口选项。