LoginSignup
2
0

More than 3 years have passed since last update.

sbt-native-packagerでdockerイメージのベースをamazoncorrettoにしたい

Posted at

build.sbtに以下を追加します。

dockerBaseImage := "amazoncorretto:{VERSION}"

image.png

ところが

sbt "docker:publishLocal"

でビルドしようとすると

[error] java.lang.RuntimeException: Nonzero exit value: 127
[error]     at com.typesafe.sbt.packager.docker.DockerPlugin$.publishLocalDocker(DockerPlugin.scala:564)
[error]     at com.typesafe.sbt.packager.docker.DockerPlugin$.$anonfun$projectSettings$37(DockerPlugin.scala:209)
[error]     at com.typesafe.sbt.packager.docker.DockerPlugin$.$anonfun$projectSettings$37$adapted(DockerPlugin.scala:201)
[error]     at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error]     at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:40)
[error]     at sbt.std.Transform$$anon$4.work(System.scala:67)
[error]     at sbt.Execute.$anonfun$submit$2(Execute.scala:269)
[error]     at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error]     at sbt.Execute.work(Execute.scala:278)
[error]     at sbt.Execute.$anonfun$submit$1(Execute.scala:269)
[error]     at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178)
[error]     at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error]     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error]     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]     at java.lang.Thread.run(Thread.java:748)
[error] (Docker / publishLocal) Nonzero exit value: 127
[error] Total time: 77 s, completed 2020/02/22 11:21:07

といったエラーが出て失敗してしまいます :innocent:
生成されたDockerfileを覗いてみると

RUN id -u demiourgos728 1>/dev/null 2>&1 || (( getent group 0 1>/dev/null 2>&1 || ( type groupadd 1>/dev/null 2>&1 && groupadd -g 0 root || addgroup -g 0 -S root )) && ( type useradd 1>/dev/null 2>&1 && useradd --system --create-home --uid 1001 --gid 0 demiourgos728 || adduser -S -u 1001 -G root demiourgos728 ))

といった行があります。
amazoncorrettoはamazonlinuxをベースにしていますが、amazonlinuxではaddgroupadduserが使えないため(参考1参考2)エラーが発生していると考えられます。

参考先にもある通り、

RUN yum install -y shadow-utils

を挟んであげる事で回避できますが、そもそも動かすだけならシンプルな設定でも十分なのでDockerfileをスクラッチで書き直してしまいましょう。
https://www.scala-sbt.org/sbt-native-packager/formats/docker.html#write-from-scratch

import com.typesafe.sbt.packager.docker._

dockerCommands := Seq(
  Cmd("FROM", "amazoncorretto:{VERSION}"),
  Cmd("COPY", "opt", "/opt"),
  ExecCmd("ENTRYPOINT", "/opt/docker/bin/{APP_NAME}")
)

生成されるDockerfileを確認するためには以下のコマンドが使えます。

sbt "show dockerCommands"
[info] * Cmd(FROM,WrappedArray(amazoncorretto:{VERSION}))
[info] * Cmd(COPY,WrappedArray(opt, /opt))
[info] * ExecCmd(ENTRYPOINT,WrappedArray(/opt/docker/bin/{APP_NAME}))

最低限の内容になっている事が確認できます。
ビルドも無事成功します。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0