rbenv: command not found | Dockerfile

はじめに

任意のRailsアプリを動かすことを目的に仮想環境のコード化を進めてきました。初めはVirtualBoxを用いて、環境構築を行いました。VirtualBoxVagrantも良いのですが、もっと手早く環境構築を試したかったため、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_profileRUN ["/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