次の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を実行しただけでは「Unable to Locate rvm」が表示されますが、docker run [...] /bin/bash -l -c "rvm"
を実行すると機能します。 (私は "-l -c"オプションをオンラインで見つけましたが、それらが何をしているのか分かりません、そして私がしていることの十分な説明が見つかりません!)
これはDockerの質問ではありません-それはbash/* nixの質問です-物がどのように/どこにインストールされるかについて何かがあると思います、おそらくルートの下でインストールを実行することに関連していますか?
ただ明確にするために-CLIから直接インストールしたものを実行できるようにしたいのです。
EDIT 1
Ruby rvmを使用してインストールすることをお勧めしますが、非インタラクティブ、非ログインシェル(つまり、Dockerコンテナー内)で実行する場合は、これにより、パス、環境変数、ログインスクリプトが実行されていません。
これを使用して、定義上分離されて回復可能なDockerコンテナーを実行している(別のコンテナーをビルドするだけ)とすると、バージョンの切り替えやパッケージの分離については特に気にしないので、インストールすることにしました= Ruby代わりにパッケージリポジトリ( http://brightbox.com/docs/Ruby/ubuntu/ )から。これは「うまくいく」だけです。
それはあなたのために機能しない可能性があります-私はProcfileを介してアプリを実行しているので、Foreman gemを取得するためにRubyをインストールしているだけなので、詳細についてはそれほど心配していません。 Rubyアプリを構築している場合、私は私の助言には従いません。
私のDockerfileはここにあります、FWIW https://index.docker.io/u/yunojuno/dev/
bash(1)
から:
-l
ログインシェルとして呼び出されたかのようにbashを動作させる-c
-cオプションが存在する場合、コマンドは文字列から読み取られます。-c
引数に渡されたコマンドを実行しています。 -l
はログインシェルにするため、bashは最初に/etc/profile
を読み取ります。これはおそらくrvm
へのパスを持つため、機能します。
FWIW、Dockerコンテナーにrvm
をインストールする方法は次のとおりです。
# 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