snuf
@snuf (snuf snuf)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

M1版Macで環境構築中にdocker-compose up mysqlのエラー

開発環境

macOS BIGSUR
version11.6
apple M1

mysql: stable 8.0.28 (bottled)

解決したいこと

docker-compose up mysql 実行後のエラーで、localhostに接続ができません。

DockerでRails開発環境を構築中です。
既存のRailsリポジトリをpcにクローンして、Dockerを導入しようとしたのですが、M1版Macのため、その調整で
A:Docker関連ファイルをM1サポート用ファイルで置き換え

cp ./for_m1_docker/docker-compose.yml ./docker-compose.yml
cp ./for_m1_docker/Dockerfile.dev ./Dockerfile.dev
git add docker-compose.yml Dockerfile.dev
git commit -m "M1 Mac用のDocker関連ファイルに変更"

B:mysqlの初期設定

docker-compose build
docker-compose up mysql

以上のコマンドをしたのですが、以下のようなエラーが発生してlocalhostに接続ができません。

発生している問題・エラー

 2022-03-24T14:37:30.674401Z 1 [ERROR] [MY-012585] [InnoDB] Linux Native AIO interface is not supported on this platform. Please check your OS documentation and install appropriate binary of InnoDB.

ちなみにdocker-compose psした結果は以下のようになります。

% docker-compose ps
NAME                       COMMAND                  SERVICE             STATUS              PORTS
sho_yamauchi-mysql-1       "docker-entrypoint.s…"   mysql               running             0.0.0.0:33306->3306/tcp
sho_yamauchi-potepanec-1   "entrypoint.sh bundl…"   potepanec           exited (1)          
yamauchishou@yamauchishounoMacBook-Pro sho_yamauchi % brew info mysql

該当するソースコード

ruby.docker-compose.yml
version: "3"
volumes:
  mysql_data:
  vendor_bundle:
  node_modules:
  public_spree:
  storage:

services:
  mysql:
    platform: linux/x86_64
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
    networks:
      - default
    ports:
      - '33306:3306'
    volumes:
      - mysql_data:/var/lib/mysql
  potepanec:
    build:
      context: .
      dockerfile: Dockerfile.dev
    ports:
      - '3000:3000'
    environment:
      MYSQL_USERNAME: root
      MYSQL_PASSWORD: password
      MYSQL_HOST: mysql
    depends_on:
      - mysql
    networks:
      - default
    volumes:
      - .:/potepanec
      # https://qiita.com/shotat/items/57d049793605ffc20135
      - /potepanec/log
      - /potepanec/tmp
      - vendor_bundle:/potepanec/vendor/bundle
      - node_modules:/potepanec/node_modules
      - public_spree:/potepanec/public/spree
      - storage:/potepanec/storage
    tty: true
    stdin_open: true
    command: bundle exec rails server -b 0.0.0.0

ruby.database.yml

default: &default
  adapter: mysql2
  encoding: utf8
  collation: utf8_general_ci
  pool: 5
  host: <%= ENV['MYSQL_HOST'] || 'localhost' %>
  username: <%= ENV['MYSQL_USERNAME'] || 'root' %>
  password: <%= ENV['MYSQL_PASSWORD'] || '' %>
  socket: /tmp/mysql.sock

development:
  <<: *default
  database: potepanec_2_7_development

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: potepanec_2_7_test

# As with config/secrets.yml, you never want to store sensitive information,
# like your database password, in your source code. If your source code is
# ever seen by anyone, they now have access to your database.
#
# Instead, provide the password as a unix environment variable when you boot
# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database
# for a full rundown on how to provide these environment variables in a
# production deployment.
#
# On Heroku and other platform providers, you may have a full connection URL
# available as an environment variable. For example:
#
#   DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase"
#
# You can use this database configuration with:
#
#   production:
#     url: <%= ENV['DATABASE_URL'] %>
#
production:
  <<: *default
  database: potepanec_2_7_production
  username: potepanec
  password: <%= ENV['POTEPANEC_DATABASE_PASSWORD'] %>

エラーの和訳が
LinuxネイティブAIOインターフェースは、このプラットフォームではサポートされていませ。 OSのドキュメントを確認し、InnoDBの適切なバイナリをインストールしてください。
となるのですが、適切なバイナリが分かりません。
もしくは、ソースコードを変更すれば、解決するのでしょうか。

アドバイスお願いいたします。

0

2Answer

services:
  mysql:
    platform: linux/x86_64
    image: mysql:8.0
    ...

とありますが、Arm64なMacなのにx64をプラットフォームに指定しているのはおかしくないだろうか?と思います。
あと、Docker 公式の mysql は Arm 版は提供されてないはずなので、MySQL が提供している方のイメージを使ったら良いのでは?とも思います。

1Like

以下の1行を追加し

 command: mysqld --innodb_use_native_aio=0

「docker-compose down → docker-compose up --build」をしたところ、

exited with code 1

のログも消えて無事にアクセスすることができました。ありがとうございました。

0Like

Your answer might help someone💌