Dockerでgem install --localをしようとしてハマった時のメモ。
結論から言うと、DockerfileのRUN命令ごとにカレントディレクトリがトップに戻ることを知らなかった。
gemが多かったので、下記のようにgem installを数行に分けていたら、
RUN /bin/bash -c "cd /usr/local/package/lib/gems;"
RUN /bin/bash -c "gem install --local rake"
RUN /bin/bash -c "gem install --local will_paginate"
docker buildすると、
ERROR: Could not find a valid gem 'rake' (>= 0) in any repository
ERROR: Could not find a valid gem 'will_paginate' (>= 0) in any repository
というエラーが出る。そこで1行目に、ls -lを追加したところ、ファイルは確かにあるようなので、
RUN /bin/bash -c "cd /usr/local/package/lib/gems;ls -l"
RUN /bin/bash -c "gem install --local rake"
RUN /bin/bash -c "gem install --local will_paginate"
途中にpwdを追加したところ、ルートに戻っていた。
RUN /bin/bash -c "cd /usr/local/package/lib/gems;ls -l"
RUN /bin/bash -c "pwd"
RUN /bin/bash -c "gem install --local rake"
RUN /bin/bash -c "gem install --local will_paginate"
カレントディレクトリを引き継ぐ方法がよくわからなかったので、とりあえず、cdするようにして解決。
(「/」は複数行にRUNを分けるための記法)
RUN /bin/bash -c "cd /usr/local/package/lib/gems;ls -l"
RUN /bin/bash -c "cd /usr/local/package/lib/gems;/
gem install --local rake will_paginate"