インストール コマンドを実行するために、イメージにshell
または を追加したいです。bash
/bin/bash
VM 上の を のイメージにコピーしました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"]