インストールコマンドを実行するために、イメージにShell
またはbash
を追加します。
私の/bin/bash
をDockerfile
の私のイメージにコピーしました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
ご協力いただきありがとうございます
これは、bash
をサポートせずに、docker
で動的にコンパイルされたglibc
を使用しようとしているためです。
bash-static
従来のbash
の代わりに download それを実行するか ./build.sh
bash
for Alpine
を追加:この行をDockerfile
に追加:RUN apk add --no-cache bash
Alpine
はmusl
ベースのディストリビューションです多くのDockerイメージは、基本イメージとしてAlpine
を使用して構築されています。Alpine
(通常)は小さく、高速です。
一般的なオペレーティングシステムのイメージのサイズを次に示します。
ソース: A Dockerhubのオペレーティングシステムの内訳
画像サイズの違いは際立っています。範囲は、1MBのBusyBoxから230MBのFedoraまでです。クラスタリングが行われているのを見るのは興味深いことです。 AlpineとBusyBoxは軽量で0MB近くですが、DebianやUbuntuなどのミッドウェイトは約100MBであり、最大のものはCentOSやOracle Linuxなどのヘビーウェイトであり、200MB増加しています。
musl
はlibtinfo
を含まないglibc
とmusl
の違いについての詳細を見る glibcとの機能の違い
bash-static
scratch
の空のコンテナでもFROM scratch
ADD bash
ENTRYPOINT ['/bash']
今はおそらくbusyboxを追加することができます。