M1 Mac の Docker で gem install grpc に失敗するときの対策
2023-06-10
![thumbnail](/_next/image?url=https%3A%2F%2Fimages.microcms-assets.io%2Fassets%2F905a207a61104dbda1ff337051103d38%2Fe4bfd84510e74584b7e11ef6dbed4d08%2Fgcp.jpg&w=1920&q=75)
docker-compose で bundle install したり、ビルドしようとするとエラーが発生。
色々試していたところ、grpc をインストールするステップで必ず失敗していること確認。
docker-compose run web gem install grpc
#=>
Installing grpc 1.43.1 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
...
省略
...
ERROR: 137
alpine Linuxが悪さをしている?という記事を見てビルドイメージを変更するが改善せず。
結論、docker-compose.yml で platform を明示することで動作するようになった。
以下、実行時のファイル内容を残しておきます。
# ディレクトリ構成
root/
├ Gemfile
├ Gemfile.lock
├ Dockerfile
└ docker-compose.yml
# Dockerfile
FROM ruby:3.0.1
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev \
nodejs \
default-mysql-client \
yarn
WORKDIR 'app'
COPY ./Gemfile* ./
RUN bundle install
# docker-compose.yml
version: '3.8'
services:
ruby:
platform: linux/x86_64 #=> 追加
build:
context: ./
dockerfile: Dockerfile
volumes:
- ./:/app
- ruby-bundle:/usr/local/bundle
stdin_open: true
tty: true
volumes:
ruby-bundle:
# Gemfile
gem 'google-cloud-pubsub'
gem 'grpc'
gem 'google-protobuf'
gem 'pristine'
Tags
![profil](/_next/image?url=https%3A%2F%2Fimages.microcms-assets.io%2Fassets%2F905a207a61104dbda1ff337051103d38%2F6079187ac85e4e23b67e53d1ff04e59e%2F4105982416-1985037-PN96-960x540-MM-100.jpg&w=640&q=75)
![profil](/_next/image?url=https%3A%2F%2Fimages.microcms-assets.io%2Fassets%2F905a207a61104dbda1ff337051103d38%2F3379dcd3663344bf8f03e3fc46e09a30%2Fr79iCrKh_400x400.jpg&w=128&q=75)
KURO
Tokyo
サーバーサイドエンジニア1年目。
学習内容やメモ書きを残します。
Tags
![profil](/_next/image?url=https%3A%2F%2Fimages.microcms-assets.io%2Fassets%2F905a207a61104dbda1ff337051103d38%2F6079187ac85e4e23b67e53d1ff04e59e%2F4105982416-1985037-PN96-960x540-MM-100.jpg&w=640&q=75)
![profil](/_next/image?url=https%3A%2F%2Fimages.microcms-assets.io%2Fassets%2F905a207a61104dbda1ff337051103d38%2F3379dcd3663344bf8f03e3fc46e09a30%2Fr79iCrKh_400x400.jpg&w=128&q=75)
KURO
Tokyo
サーバーサイドエンジニア1年目。
学習内容やメモ書きを残します。