rbenv: command not found | Dockerfile
はじめに
任意のRailsアプリを動かすことを目的に仮想環境のコード化を進めてきました。初めはVirtualBoxを用いて、環境構築を行いました。VirtualBoxもVagrantも良いのですが、もっと手早く環境構築を試したかったため、Dockerに移行しました。
VirtualBox: rootパスや一般ユーザーを毎回設定し、インストールにも時間がかかる。最大の欠点は、コピペを許可するには別途設定が必要なこと。
Vagrant: VirtualBoxと比べれば速い。rootパスもよしなに設定してくれる。それでも毎回作って壊して作ってをすると、OSのインストールに時間がかかる。
What
表題に戻ります。表題のエラーはPATHが通っていないため、rbenvコマンドが使えないというエラーです。以下のようなコマンドを実行しているため、インストール自体はできています。
FROM centos:centos7 # gitのインストール√ RUN yum -y install git # rbenv(rubyのバージョン管理ツール)のインストール RUN git clone https://github.com/sstephenson/rbenv.git ~/.rbenv RUN echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile RUN echo 'eval "$(rbenv init -)"' >> ~/.bash_profile RUN source ~/.bash_profile
Solution
ひとまず、source ~/.bash_profileを実行したところまででコンテナを作り、中をみることにしました。以下を実行します。
# echo $PATH > /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PATHが更新されていません。以下を実行し、必要なPATHを確認します。/root/.rbenv/binと/root/.rbenv/shimsを追加すると、rbenvコマンドが使えるようになりました。
# source ~/.bash_profile > /root/.rbenv/bin:/root/.rbenv/shims:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # rbenv -v > rbenv 1.1.2-11-gc46a970
DockerfileでのRUN source ~/.bash_profile
が実行されていないのが原因のようです。以下のように、ENVでPATHを通すことで解決しました。ちなみに、RUN . ~/bash_profile
や RUN ["/bin/bash", "-c", "source ~/.bash_profile"]
を試してもダメでした。
# rbenvインストール RUN git clone https://github.com/sstephenson/rbenv.git ~/.rbenv RUN echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile RUN echo 'eval "$(rbenv init -)"' >> ~/.bash_profile # add /root/.rbenv/bin:/root/.rbenv/shims ENV PATH $PATH:/root/.rbenv/bin ENV PATH $PATH:/root/.rbenv/shims