【发布时间】:2020-06-02 06:12:38
【问题描述】:
我的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 run”命令?
-
您是否将容器的 9000 端口映射到主机中的 9000 端口?
-
您可以尝试
docker exec -it <container-id> bash和curl 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...]。图像名称之后的任何内容都作为参数传递给入口点。