web-dev-qa-db-ja.com

Dockerイメージにシェルまたはbashを追加します(Debian GNU / Linuxに基づくDistroless)

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

私の/bin/bashDockerfileの私のイメージにコピーしましたVM on:

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

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

2
egrey

これは、bashをサポートせずに、dockerで動的にコンパイルされたglibcを使用しようとしているためです。

TL; DR

  • ...どちらかを使用 bash-static 従来のbashの代わりに download それを実行するか ./build.sh
  • またはbash for Alpineを追加:この行をDockerfileに追加:RUN apk add --no-cache bash

Alpinemuslベースのディストリビューションです

多くのDockerイメージは、基本イメージとしてAlpineを使用して構築されています。Alpine(通常)は小さく、高速です。

一般的なオペレーティングシステムのイメージのサイズを次に示します。

The difference in image size ソース: A Dockerhubのオペレーティングシステムの内訳

画像サイズの違いは際立っています。範囲は、1MBのBusyBoxから230MBのFedoraまでです。クラスタリングが行われているのを見るのは興味深いことです。 AlpineとBusyBoxは軽量で0MB近くですが、DebianやUbuntuなどのミッドウェイトは約100MBであり、最大のものはCentOSやOracle Linuxなどのヘビーウェイトであり、200MB増加しています。

musllibtinfoを含まない

glibcmuslの違いについての詳細を見る glibcとの機能の違い

追伸あなたはbash-staticscratchの空のコンテナでも

FROM scratch
ADD bash
ENTRYPOINT ['/bash']

今はおそらくbusyboxを追加することができます。

2
Yasen