【问题标题】:sbt immediately stops when running in docker containersbt 在 docker 容器中运行时立即停止
【发布时间】:2020-07-21 01:53:19
【问题描述】:

我正在尝试设置我们的项目以使用 Docker。我根据这张图片创建了一张图片:https://github.com/mozilla/docker-sbt

我的 docker-compose.yml 文件中的命令是:

sbt -J-XX:MaxMetaspaceSize=500m -Dlogger.file=conf/dev-logback.xml -Dconfig.file=$dev -Dhttp.port=$srfPort -Dhttps.port=9443 -Djdbcdslog.showTime=true -J-Dakka.http.parsing.max-uri-length=16k run 

(此命令在非docker环境下工作。)

下面是docker-compose up 的输出。请注意,它启动后立即显示“正在停止服务器...”。当我观看控制台时,我注意到“Listening”行和“stopping”行之间没有停顿。

[info] Loading settings for project my-project from build.sbt ...
[info] Set current project to my-project (in build file:/home/my-name/my-project/app/)

--- (Running the application, auto-reloading is enabled) ---

[info] p.c.s.AkkaHttpServer - Listening for HTTP on /0.0.0.0:9000
[info] p.c.s.AkkaHttpServer - Listening for HTTPS on /0.0.0.0:9443

(Server started, use Enter to stop and go back to the console...)

[info] p.c.s.AkkaHttpServer - Stopping server...
[warn] StaticRoutesGenerator is deprecated. Please use InjectedRoutesGenerator or a custom router instead.
[warn] For more info see https://www.playframework.com/documentation/2.6.x/JavaRouting#Dependency-Injection
[warn] StaticRoutesGenerator is deprecated. Please use InjectedRoutesGenerator or a custom router instead.
[warn] For more info see https://www.playframework.com/documentation/2.6.x/JavaRouting#Dependency-Injection
2020-04-07 21:32:10,984~[WARN]~Logger configuration in conf files is deprecated and has no effect. Use a logback configuration file instead.~
2020-04-07 21:32:14,313~[INFO]~Slf4jLogger started~
2020-04-07 21:32:15,413~[INFO]~Database [default] initialized at jdbc:mysql://srf_db:3306/srf2?socketTimeout=10000&verifyServerCertificate=false&useSSL=false&requireSSL=false~
2020-04-07 21:32:15,481~[INFO]~Creating Pool for datasource 'default'~
2020-04-07 21:32:15,514~[INFO]~HikariPool-1 - Starting...~
2020-04-07 21:32:16,066~[INFO]~HikariPool-1 - Start completed.~
2020-04-07 21:32:40,261~[INFO]~Application started (Dev)~
2020-04-07 21:32:40,319~[INFO]~Shutting down connection pool.~
2020-04-07 21:32:40,334~[INFO]~HikariPool-1 - Shutdown initiated...~
2020-04-07 21:32:40,366~[INFO]~HikariPool-1 - Shutdown completed.~

[success] Total time: 140 s (02:20), completed Apr 8, 2020 1:32:40 AM

我不知道在哪里查找错误或错误的性质可能是什么:丢失的文件?丢失的文件夹?缺少依赖?缺少设置命令?权限错误?

我不知道如何进一步调试。如果您对去哪里有任何猜测,我们将不胜感激。

[编辑]

感谢下面 cbley 的提示,我知道我的 docker-compose.yml 文件应该是什么样子:

  sbt:
    image: my-image
    stdin_open: true
    tty: true
    depends_on:
      - db
    environment:
      - MYSQL_HOST=db
      - USER
    volumes:
      - ./:/home/docker1/
    command: bash -c "sbt etc..."
    ports:
      - "9000:9000"
      - "9443:9443"

注意添加的stdin_opentty 行。

【问题讨论】:

    标签: docker sbt


    【解决方案1】:

    当以交互方式运行 Play 服务时(在开发模式下),它会等待用户按下 Enter

    在容器内时,标准输入未连接到 TTY,因此从标准输入读取立即失败,导致服务器停止,也退出 SBT,因为 run 任务是唯一的。

    您可以通过运行 sbt docker:publishLocal 从 Play 服务构建 Docker 映像。 (容器内不需要有 SBT)

    【讨论】:

    • 感谢您对正在发生的事情的解释。但是如果创建这个 docker 映像,我的全部目的是让我不需要在我的计算机上安装 sbt。我希望开发环境完全包含在内,以便操作系统更新不会破坏任何东西和/或我可以将其提供给其他人,而不是让他们安装一堆开发工具。
    • 再次感谢您!你引导我正确。我需要将stdin_open: true tty: true 添加到我的 docker-compose.yml 文件中。我将在上面编辑我的问题以供后代使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 2021-12-03
    • 1970-01-01
    • 2018-04-22
    • 2017-06-26
    • 2018-04-29
    • 1970-01-01
    相关资源
    最近更新 更多