Moby: BuilderRUNに/ bin / shの代わりに/ bin / bashを使用させる方法

作成日 2014年07月28日  ·  11コメント  ·  ソース: moby/moby

Dockerfileビルドスクリプトを作成していて、bashコマンドを使用したいと思います。 RUNはデフォルトで/ bin / shを使用します。 代わりに/ bin / bashを使用するようにRUNに指示する方法はありますか?

arebuilder kinquestion

最も参考になるコメント

@ORESoftware上記の説明、およびSHELL Dockerfile命令(Docker 1.12以降)を追加したhttps://github.com/moby/moby/pull/22489を参照して

  • 単一のRUNに別のシェルを使用する場合は、上記で説明したように、 Execフォーム(JSON)表記を使用し

    RUN ["/bin/bash", "-c", "echo I am now using bash!"]
    
  • イメージ内(およびビルド中)のデフォルトシェルを変更する場合は、 httpsSHELL Dockerfile命令を使用します

    SHELL ["/bin/bash", "-c"]
    RUN echo I am now using bash!
    
  • または、上記の組み合わせ

    FROM ubuntu
    RUN echo I am using the default (/bin/sh)
    RUN ["/bin/bash", "-c", "echo I am using bash"]
    SHELL ["/bin/bash", "-c"]
    RUN echo I am using bash, which is now the default
    RUN ["/bin/sh", "-c", "echo I am using /bin/sh"]
    RUN ["echo", "I don't use a shell at all"]
    

全てのコメント11件

いいえ、これは「/ bin / sh-c」にハードコードされています
もちろん、前のビルドステップで/ bin / bashを/ bin / shにリンクすることもできます。

結局、Dockerfileスクリプトを変更してファイルをコピーし、bashで使用していたリダイレクトを使用するのではなくそれを使用することになりました。

@dwatrous試してみRUN ["echo", "hello"]/bin/sh IIRCでラップされません。 したがって、bashがどうしても必要な場合は、 RUN ["/bin/bash", "-c", "echo hello all in one string"]呼び出すことができます。
それがあなたの問題を解決するかどうか私たちに知らせてください。

bashは、 RUN手順で使用することにより、手動で使用できます。

bashに変更できるようにする意図や計画はありません。

これを文書化する可能性があるため、これをドキュメントの問題としてマークします。 この質問が出てきたのは3回目または4回目です。

PR: https

https://github.com/docker/docker/pull/7489により、これを閉じることができます

それで、これの話は何ですか?

@ORESoftware上記の説明、およびSHELL Dockerfile命令(Docker 1.12以降)を追加したhttps://github.com/moby/moby/pull/22489を参照して

  • 単一のRUNに別のシェルを使用する場合は、上記で説明したように、 Execフォーム(JSON)表記を使用し

    RUN ["/bin/bash", "-c", "echo I am now using bash!"]
    
  • イメージ内(およびビルド中)のデフォルトシェルを変更する場合は、 httpsSHELL Dockerfile命令を使用します

    SHELL ["/bin/bash", "-c"]
    RUN echo I am now using bash!
    
  • または、上記の組み合わせ

    FROM ubuntu
    RUN echo I am using the default (/bin/sh)
    RUN ["/bin/bash", "-c", "echo I am using bash"]
    SHELL ["/bin/bash", "-c"]
    RUN echo I am using bash, which is now the default
    RUN ["/bin/sh", "-c", "echo I am using /bin/sh"]
    RUN ["echo", "I don't use a shell at all"]
    

私はパーティーに遅れていることを知っています、そしてはい、これは最善の解決策ではありませんが、それは私が必要としたもののために働きました

SDKをダウンロードして抽出した後、Dockerファイルでこれらの2つのコマンドを実行します

cp / bin / bash / bin / shを実行します
RUN echo "source〜 / google-cloud-sdk / path.bash.inc" >>〜/ .bashrc
RUNソース〜/ .bashrc

その後、gcloudコマンドはビルド中および実行時に使用可能になります

厳密なOCIの再現性に関心がある場合、podman 1.4によると、Dockerfile呼び出しSHELLはOCIv1仕様に含まれていないようです。

ステップ2:シェル["/ bin / bash"、 "-c"]
ERRO [0000] SHELLはOCIイメージ形式ではサポートされていません。[/ bin / bash-c]は無視されます。 docker形式を使用する必要があります

更新:thaJeztahは正しいようです、buildahでこの機能のサポートに関するいくつかの議論: https

Update2:救助のためのBUILDAH_FORMAT=docker

@qhaasは、それがOCI仕様に関係しているとは考えておらず、buildahの実装だけに関係していると考えています。

このページは役に立ちましたか?
0 / 5 - 0 評価