我的 container
的 play/scala
申请开始于 [info] p.c.s.AkkaHttpServer - Listening for HTTP on /0.0.0.0:9000
. 但我无法从浏览器连接到它。我在我的windows机器上运行这个容器,在使用了 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
. 如果它不健康,问题通常在你的应用程序中。
确保它在运行时没有错误,检查日志,用 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.comnetworkhost#:~:text=The%20host%20networking%20driver%20only,the%20docker%20service%20create%20command。.
《公约》的一般形式 docker run
命令是 docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
可见 文件. 您需要在图像名称前指定端口选项。