コンテナ内でbash -l -cを使用する必要があるのはなぜですか?

Hugo Rodger-Brown:

次のDockerfile(一部省略)を使用してDockerコンテナーを作成しました。

FROM ubuntu:12.04
# curl enables downloading of other things
RUN apt-get install curl -y
# download and install rvm...
RUN \curl -L https://get.rvm.io | bash -s stable
# ... so that we can install ruby
RUN /bin/bash -l -c "rvm requirements"

等々。

これはすべて機能しますが、私が抱えている問題は、パッケージのインストール方法/場所です。

を使用docker run [...] rvmしてrvmを実行docker run [...] /bin/bash -l -c "rvm"しただけの場合、「rvmが見つかりません」というメッセージが表示されますが、実行すると機能します。(私は "-l -c"オプションをオンラインで見つけましたが、それらが何をしているのか分かりません、そして私が何をしているのかについて十分な説明が見つかりません!)

これはドッカーの質問ではありません-それはbash / * nixの質問です-物がどのように/どこにインストールされるかについて何かがあると思います、おそらくルートの下でインストールを実行することに関連していますか?

ただ明確にするために-CLIから直接インストールしたものを実行できるようにしたいのです。

編集1

rvmを使用してRubyをインストールすることをお勧めしますが、非インタラクティブ、非ログインシェル(つまり、Dockerコンテナー内)で実行したい場合は、パスと環境変数、および実行中のログインスクリプトに手間がかかりすぎます。 。

これを使用して、定義上分離されて回復可能なDockerコンテナーを実行している(別のコンテナーをビルドするだけ)とすると、バージョンの切り替えやパッケージの分離については特に気にしないので、Rubyをインストールすることにしました代わりにパッケージリポジトリ(http://brightbox.com/docs/ruby/ubuntu/からこれは「うまくいく」だけです。

動作しない場合があります。Procfileを介してアプリを実行しているため、Foreman gemを取得するためにRubyをインストールしているだけなので、詳細についてはそれほど心配していません。Rubyアプリを作成している場合、私は私の助言には従いません。

私のDockerfileはここにあります、FWIW、https: //index.docker.io/u/yunojuno/dev/

Ben Whaley:

からbash(1)

  • -l ログインシェルとして呼び出されたかのようにbashを動作させる
  • -c -cオプションが存在する場合、コマンドは文字列から読み取られます。

-c引数に渡されたコマンドを実行しています。-lbashが最初に読み込むので、それをログインシェルになり/etc/profile、おそらくパスに持っている、rvmそれが動作するものであるが。

FWIW、rvmDockerコンテナーにインストールする方法を次に示します。

# Install some dependencies
RUN apt-get -y -q install curl rubygems

# Install rvm
RUN curl -L https://get.rvm.io | bash -s stable

# Install package dependencies
RUN /usr/local/rvm/bin/rvm requirements

# Install ruby
RUN /usr/local/rvm/bin/rvm install ruby-2.0.0

# create first wrapper scripts
RUN /usr/local/rvm/bin/rvm wrapper ruby-2.0.0 myapp rake rails gem

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

-rpathを使用するときに-Lが必要なのはなぜですか?

分類Dev

Dockerコンテナを削除する必要があるのはなぜですか?

分類Dev

Dockerコンテナを削除する必要があるのはなぜですか?

分類Dev

SerializeFieldを使用する必要があるのはなぜですか?

分類Dev

SerializeFieldを使用する必要があるのはなぜですか?

分類Dev

chrootを使用する必要があるのはなぜですか

分類Dev

C#を学ぶ必要があるのはなぜですか?

分類Dev

Fortranで「使用のみ」を使用する必要があるのはなぜですか

分類Dev

なぜshutdownNow()ではなくawaitTerminationを使用する必要があるのですか?

分類Dev

Super_L + Spaceを押すと、bashが/ etc / hostsの有効なコンテンツを一覧表示するのはなぜですか?

分類Dev

C / C ++で配列へのポインタを使用する必要があるのはなぜですか?

分類Dev

C ++で使用する前に文字列を初期化する必要があるのはなぜですか?

分類Dev

C ++で多重継承を回避する必要があるのはなぜですか?

分類Dev

'react'からimportReactを使用する必要があるのはなぜですか

分類Dev

AndroidでRequestQueueを使用する必要があるのはなぜですか?

分類Dev

StackでDequeを使用する必要があるのはなぜですか?

分類Dev

$ resourceで$ promiseを使用する必要があるのはなぜですか?

分類Dev

Flutterでカードを使用する必要があるのはなぜですか?

分類Dev

Angular UnitTestingでJasmineSpy Objectを使用する必要があるのはなぜですか?

分類Dev

mongoDBクエリで+を使用する必要があるのはなぜですか

分類Dev

ReactJsでweb-packを使用する必要があるのはなぜですか?

分類Dev

jQueryにGoogleのCDNを使用する必要があるのはなぜですか?

分類Dev

なぜflatMapを使用する必要があるのですか?

分類Dev

なぜ基数を使用する必要があるのですか?

分類Dev

なぜEMFを使用する必要があるのですか?

分類Dev

なぜIDEを使用する必要があるのですか?

分類Dev

なぜJPanelを使用する必要があるのですか?

分類Dev

なぜstd :: forwardを使用する必要があるのですか?

分類Dev

Rails。なぜActiveRecordを使用する必要があるのですか?

Related 関連記事

  1. 1

    -rpathを使用するときに-Lが必要なのはなぜですか?

  2. 2

    Dockerコンテナを削除する必要があるのはなぜですか?

  3. 3

    Dockerコンテナを削除する必要があるのはなぜですか?

  4. 4

    SerializeFieldを使用する必要があるのはなぜですか?

  5. 5

    SerializeFieldを使用する必要があるのはなぜですか?

  6. 6

    chrootを使用する必要があるのはなぜですか

  7. 7

    C#を学ぶ必要があるのはなぜですか?

  8. 8

    Fortranで「使用のみ」を使用する必要があるのはなぜですか

  9. 9

    なぜshutdownNow()ではなくawaitTerminationを使用する必要があるのですか?

  10. 10

    Super_L + Spaceを押すと、bashが/ etc / hostsの有効なコンテンツを一覧表示するのはなぜですか?

  11. 11

    C / C ++で配列へのポインタを使用する必要があるのはなぜですか?

  12. 12

    C ++で使用する前に文字列を初期化する必要があるのはなぜですか?

  13. 13

    C ++で多重継承を回避する必要があるのはなぜですか?

  14. 14

    'react'からimportReactを使用する必要があるのはなぜですか

  15. 15

    AndroidでRequestQueueを使用する必要があるのはなぜですか?

  16. 16

    StackでDequeを使用する必要があるのはなぜですか?

  17. 17

    $ resourceで$ promiseを使用する必要があるのはなぜですか?

  18. 18

    Flutterでカードを使用する必要があるのはなぜですか?

  19. 19

    Angular UnitTestingでJasmineSpy Objectを使用する必要があるのはなぜですか?

  20. 20

    mongoDBクエリで+を使用する必要があるのはなぜですか

  21. 21

    ReactJsでweb-packを使用する必要があるのはなぜですか?

  22. 22

    jQueryにGoogleのCDNを使用する必要があるのはなぜですか?

  23. 23

    なぜflatMapを使用する必要があるのですか?

  24. 24

    なぜ基数を使用する必要があるのですか?

  25. 25

    なぜEMFを使用する必要があるのですか?

  26. 26

    なぜIDEを使用する必要があるのですか?

  27. 27

    なぜJPanelを使用する必要があるのですか?

  28. 28

    なぜstd :: forwardを使用する必要があるのですか?

  29. 29

    Rails。なぜActiveRecordを使用する必要があるのですか?

ホットタグ

アーカイブ