Docker イメージにシェルまたは bash を追加する (Debian GNU/Linux ベースの Distroless) 質問する

Docker イメージにシェルまたは bash を追加する (Debian GNU/Linux ベースの Distroless) 質問する

インストール コマンドを実行するために、イメージにshellまたは を追加したいです。bash

/bin/bashVM 上の を のイメージにコピーしましたDockerfile:

COPY /bin/bash /bin/

しかし、docker コマンドを実行すると:

 docker run -it --entrypoint "/bin/bash" <my_image>

すると次のエラーが発生します:

/bin/bash: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

ご協力いただきありがとうございます

ベストアンサー1

公式から静的にコンパイルされたシェルをコピーすることで実行できますbusybox画像Dockerfile のマルチステージ ビルドで。または、COPY --fromそれだけです。

静的シェルにはそれほど多くの依存関係がないため、さまざまなベース イメージで動作します。一部の高度なケースでは動作しない可能性がありますが、それ以外の場合は問題なく動作します。

静的にコンパイルされたシェルは でタグ付けされますuclibc。ベースイメージによっては、 の他のフレーバーでbusyboxも成功する可能性があります。

例:

FROM busybox:1.35.0-uclibc as busybox

FROM gcr.io/distroless/base-debian11

# Now copy the static shell into base image.
COPY --from=busybox /bin/sh /bin/sh

# You may also copy all necessary executables into distroless image.
COPY --from=busybox /bin/mkdir /bin/mkdir
COPY --from=busybox /bin/cat /bin/cat

ENTRYPOINT ["/bin/sh", "/entrypoint.sh"]

COPY --from画像から直接1 行を入力することもできます。

FROM gcr.io/distroless/base-debian11

COPY --from=busybox:1.35.0-uclibc /bin/sh /bin/sh

ENTRYPOINT ["/bin/sh", "/entrypoint.sh"]

おすすめ記事