
M1 Mac で Docker 環境構築をする機会がありました。
Windows や Intel Mac では動作するけれど M1 Mac では動かないといったことがあり、そのときの対応を備忘録として書いていきます。
目次
MySQL に接続できない
MySQL のバージョンが5.7.12だと以下のエラーが発生して起動できませんでした。
runtime: failed to create new OS thread (have 2 already; errno=22)
fatal error: newosproc
docker-compose.yml の設定を以下に書き換えると、問題なく起動して接続できます。
db:
image: mysql:8.0.26 # mysql:5.7.12 から 8系に変更
platform: linux/arm64 # 追記
ports:
- 3306:3306
volumes:
- ./mysql:/var/lib/mysql
※追記
docker のバージョンを v20.0.14 に上げたところ上記の設定だとうまくいかず、下記の設定に変更して対応しました。
db:
image: mysql:8.0
platform: linux/x86_64
rasterio のインストールでエラー
ベースイメージが ubuntu:20.04 の場合、rasterio ライブラリをインストールするときに以下のエラーが発生しました。
WARNING:root:Failed to get options via gdal-config: [Errno 2] No such file or directory: 'gdal-config'E9E6E1
ERROR: A GDAL API version must be specified. Provide a path to gdal-config using a GDAL_CONFIG environment variable or use a GDAL_VERSION environment variable.
こちらの Issue を参考に、docker-compose.yml でベースイメージを以下に変更してうまくいきました。
FROM osgeo/gdal:ubuntu-full-3.4.0 # ubuntu:20.04 から変更
Cannot find any JVM shared library エラー
snappy-jpy をインストールするときに Cannot find any JVM shared library エラーが発生しました。
こちらもベースイメージが原因で、ubuntu:20.04 に –platform=linux/amd64 を指定することで解決します。
FROM --platform=linux/amd64 ubuntu:20.04
参考・おすすめ記事
Docker の知識が乏しく、エラー対応にかなりの時間を要しました。
解決方法を調べる過程で、Docker の基礎知識をつけるのに参考になった記事をご紹介します。
基礎知識を習得するのにおすすめです。image や dockerfile といった基本概念から設計のベストプラクティスなどが学べます。
M1 Mac と Docker の基本知識、エラーパターンと解決アプローチについてわかりやすく書かれている記事です。問題にぶつかったときの手がかりを見つけるときにおすすめです。
余談
rasterio のインストールエラーは調べてもなかなか解決できず、Windows や Intel Mac では動くとのことだったので、2台目として Windows を買ってしまおうかと思っていました。
手元に Windows がなかったので、 動くか自分で確かめてから買おうとモノカリでレンタルしました。
Windows の Microsoft Edge ブラウザでも rasterio エラーを調べていたら、解決に至った Issue が検索結果の1番目に出てきて、あっさり動いた経緯があります。
Chrome では同じ検索ワードでも上位にこなかったので、ブラウザを変えて調べるのも解決方法の一つかもしれません・・・