ちゃんるいすのブログ

オタクエンジニアの雑記

ECS と distroless イメージの組み合わせは悲しい


最近見るプロジェクトが増えました。

ECS コンテナのヘルスチェックにいつもどおり何かを書く

CMD,curl,localhost

しかし、永遠に UNKNOWN になる。

使ってるイメージを持ってきてローカルで確認してみる。

$ luis@ubuntu ~ $ docker run --name test -it --rm --entrypoint "bash"
docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"bash\": executable file not found in $PATH": unknown.
$ luis@ubuntu ~ $ docker run --name test -it --rm --entrypoint "sh"
docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"sh\": executable file not found in $PATH": unknown.
$ luis@ubuntu ~ $ docker run --name test -it --rm --entrypoint "curl"
docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"curl\": executable file not found in $PATH": unknown.

どうやって、Docker イメージを作ってるのか調べてみると jib とかいうのを使ってるらしい。
そこにベースのイメージを指定できるのだけど

jib {
    from {
        image = "gcr.io/distroless/java:11"
    }
    ...
}

gcr.io/distroless/java:11 をベースイメージに作ってるらしい。

github.com

They do not contain package managers, shells or any other programs you would expect to find in a standard Linux distribution.

なるほど。