sbt немедленно останавливается при запуске в контейнере docker - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь настроить наш проект для использования 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. Обратите внимание, что сразу после запуска появляется сообщение «Остановка сервера ...». Когда я смотрю на консоль, я замечаю, что между линией «Прослушивание» и «остановкой» нет паузы.

[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 -компонент. Файл 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_open и tty.

1 Ответ

1 голос
/ 09 апреля 2020

При интерактивном запуске службы Play (в режиме разработки) пользователь ожидает нажатия Enter .

Когда внутри контейнера стандартный ввод не подключен к TTY и таким образом, чтение со стандартного ввода немедленно прекращается, что приводит к остановке сервера, который также выходит из SBT, поскольку задача run была единственной.

Вы можете создать образ Docker из службы Play, запустив sbt docker:publishLocal. (нет необходимости иметь SBT внутри контейнера)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...