docker-compose buildする際に色々エラー踏んだので備忘録として書きます
2019 9/4追記
原因2について、こちらの記事も大変参考になるなーと感じたので載せときます
Circle CI で mysql-client が apt-get install できなくなってCI環境が壊れた話
一応修正前のソースコードも載せときますね
https://github.com/ityusuke/docker-test
Dockerfileはこんな感じで書いてます。
FROM ruby:2.5.5
RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \
mariadb-client\
nodejs
RUN mkdir /app_name
ENV APP_ROOT /app_name
WORKDIR $APP_ROOT
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock
RUN bundle install
ADD . $APP_ROOT
エラー文はこんな感じです。おそらくbundle installでコケてるのかな?と思ったのですが、具体的な解決方法が検討つかないので、有識者の方に知恵を貸して頂きました!
ERROR:Service 'web' failed to build: The command '/bin/sh -c bundle install' returned a non-zero code: 18
原因その1:ローカルとdockerイメージの両者で、bundlerのバージョンが一致していない
ローカルのbundlerは2系(2.0.2)を使っていたのですが、落としてくるイメージのbundlerは1系なのでバージョンの整合性が取れずにエラーが起きてしまう、とのことでした。
なるほど!!!!ということで
その後、Gemfile.lock内のBUNDLERのバージョンを下げ、docker-compose buildしてみたところ、今度は別のエラーが、、、なんでやねーん
以下エラー文です
E: Package 'mysql-client' has no installation candidate
ERROR: Service 'web' failed to build: The command '/bin/sh -c apt-get update -qq && apt-get install -y build-essential libpq-dev mysql-client nodejs returned a non-zero code: 100
原因その2:mysql-client は、 mariadb-client に統合されてしまっている
「パッケージ:「mysql-client」 のインストール候補がありません」という意味だと仮定して調べてみたところ同じような記事があったので確認してみます
https://stackoverflow.com/questions/57048428/e-package-mysql-client-has-no-installation-candidate-in-php-fpm-image-build-u
記事によるとどうやら、mysql-client は、 mariadb-client に統合されちゃったみたいですね...
ということで、Dockerfile内のmysql-client を、 mariadb-clientに変更してdocker-compose buildしてみます
...成功しました!!!!!!!!
いやー長かった〜
まとめ
1.dockerイメージを引っ張ってくるときは内容をきちんと確認しましょう
2.2019年9/3現在ではmysql-client は、 mariadb-client に統合されているようです
駄文失礼いたしました