【问题标题】:Docker: Play framework application exits with code 0Docker:播放框架应用程序以代码 0 退出
【发布时间】:2020-04-02 11:50:51
【问题描述】:

我正在对我的 scala play 框架应用程序进行 dockerizing。 Docker 构建成功,但 docker run 以代码 0 退出。

user-service | [info] Loading project definition from /app/project
user-service | [info] Set current project to user-service (in build file:/app/)
user-service | 
user-service | SLF4J: Class path contains multiple SLF4J bindings.
user-service | SLF4J: Found binding in [jar:file:/app/lib/logback-classic-1.2.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
user-service | SLF4J: Found binding in [jar:file:/root/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
user-service | SLF4J: Found binding in [jar:file:/root/.ivy2/cache/org.slf4j/slf4j-nop/jars/slf4j-nop-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
user-service | SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
user-service | SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
user-service | --- (Running the application, auto-reloading is enabled) ---
user-service | 
user-service | [info] p.c.s.AkkaHttpServer - Listening for HTTP on /0.0.0.0:9004
user-service | 
user-service | (Server started, use Enter to stop and go back to the console...)
user-service | 
user-service | [info] p.c.s.AkkaHttpServer - Stopping server...
user-service | 
user-service | [success] Total time: 4 s, completed Apr 2, 2020 10:40:20 AM
user-service exited with code 0

我的 Dockerfile

FROM sshek2019/docker-scala

WORKDIR '/app'

COPY

EXPOSE 9004

CMD ["sbt", "run"]

我的 docker-compose 文件

version: "3.7"

services:
  api:
    build: .
    container_name: user-service
    expose:
      - "9004"
    ports:
      - "9004:9004"

【问题讨论】:

  • 你能在调试模式下运行docker吗,
  • 如何在调试模式下运行docker?
  • 还有一点我想说的是,它在交互式终端模式下运行良好。
  • Play 的设置includes the sbt-native-packager plugin,其中包括support to build a Docker image。您可以尝试在 build.sbt 文件中配置它,然后使用 sbt docker:publishLocal 获取图像。

标签: java scala docker playframework docker-compose


【解决方案1】:

您的配置表明,在进入/关闭标准输入时,您的应用程序应该关闭,打开后立即终止它。您应该为 docker 映像禁用 development mode

例如你可以使用test instance mode:

CMD ["sbt", "runProd"]

但是,您应该在 Docker 中以交互模式运行 sbt,这样 std-in 就不会立即关闭。

docker run --it ...

【讨论】:

  • 但是如何使用 docker-compose 文件在交互模式下运行呢?
  • 要么你运行一个特定的服务docker-compose run [flags] service,它应该在交互模式下运行它,或者(如果你使用 docker up)你不需要任何你的服务需要它 - 使用 sbt 它是 runProd但通常对于docker-compose up,你不应该使用 sbt 而应该使用 prebuild image
  • 还有另一种解决此问题的方法,即使用sbt dist 命令并在docker 中使用生成的可执行文件,但随后出现了另一个问题,即在这种情况下,只有http url 有效而https 没有。我已经创建了一个单独的 stackoverflow 帖子 [stackoverflow.com/questions/60887982/…
猜你喜欢
  • 2020-07-08
  • 2018-12-09
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多