Ошибка OCI "/ opt / docker / bin / my_job": нет такого файла или каталога с использованием sbt docker: publishLocal - PullRequest
0 голосов
/ 27 марта 2019

Если вы используете sbt docker:publishLocal для создания образа докера из вашего проекта Scala, вы увидите распечатанные ниже строки:

[info] Packaging /home/user123/myUser/repos/my_job/target/scala-2.12/app_internal_2.12-0.1.jar ...
[info] Done packaging.
[info] Sending build context to Docker daemon  129.7MB
[info] Step 1/7 : FROM openjdk:11-jre
[info]  ---> 8c8b7f0ab84c
[info] Step 2/7 : LABEL MAINTAINER="no_name@my.org"
[info]  ---> Using cache
[info]  ---> d5caf9a92999
[info] Step 3/7 : WORKDIR /opt/docker
[info]  ---> Using cache
[info]  ---> d887eeb10e8e
[info] Step 4/7 : ADD --chown=root:root opt /opt
[info]  ---> 1b43a84a5e32
[info] Step 5/7 : USER root
[info]  ---> Running in 282c7f7de8ad
[info] Removing intermediate container 282c7f7de8ad
[info]  ---> 11fed4892683
[info] Step 6/7 : ENTRYPOINT ["/opt/docker/bin/my_job"]
[info]  ---> Running in 1d297dd1e960
[info] Removing intermediate container 1d297dd1e960
[info]  ---> 1923a8df3fcf
[info] Step 7/7 : CMD []
[info]  ---> Running in 3d9f7a4a262b
[info] Removing intermediate container 3d9f7a4a262b
[info]  ---> d67ed46fd3fe
[info] Successfully built d67ed46fd3fe
[info] Successfully tagged docker_app_internal:0.1
[info] Built image docker_app_internal with tags [0.1]
[success] Total time: 25 s, completed Mar 27, 2019 10:23:35 AM

Вы можете запутаться из-за ошибки. И почему: ЭТО РАБОТАЕТ:

docker run -it --entrypoint=/bin/bash docker_app_internal:0.1  -i

Не работает:

docker run docker_app_internal:0.1

Спасибо @Muki за создание этого полезного проекта.

См .: https://github.com/sbt/sbt-native-packager

1 Ответ

2 голосов
/ 27 марта 2019

Если ваша корневая папка проекта отличается от имени MainClass, то entrypoint с использованием sbt docker:publishLocal становится /your/linuxpath/bin/rootFolder.Но фактический файл, который создается в образе докера, равен /your/linuxpath/bin/main-class (если имя вашего основного класса MainClass)

Чтобы исправить это, пожалуйста, явно укажите точку входа в build.sbt, как показано ниже:

dockerEntrypoint := Seq("/opt/docker/bin/main-class")
...