无法连接地址为 /0.0.0.0:9000 的容器
Unable to connect with container at address /0.0.0.0:9000
我的 container
的 play/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
访问您的应用程序。并尝试使用 curl
或 wget
访问端口。如果无法访问,问题可能出在 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 中所见。您需要在图像名称之前指定端口选项。
我的 container
的 play/scala
应用程序从 [info] p.c.s.AkkaHttpServer - Listening for HTTP on /0.0.0.0:9000
开始。但是我无法从浏览器连接到它。在使用 Docker for 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
访问您的应用程序。并尝试使用curl
或wget
访问端口。如果无法访问,问题可能出在 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 中所见。您需要在图像名称之前指定端口选项。