【Docker+MySQL】「mbind: Operation not permitted」の対応

こんにちは、おくやんです。

このブログでは、開発に役立つノウハウを実践的なコード例と共に紹介しています。

Docker上でMySQLを起動した際に「mbind: Operation not permitted」が発生するけど、どう対応すればいいかわからない。。。

今回は、このようなお悩みを解決します。

本記事の内容

 「mbind: Operation not permitted」が発生する理由
 「mbind: Operation not permitted」の対処方法

Docker上でMySQLを起動した際に出力されるエラーに関して調べてみました。

同様の事象に悩んでいる方は本記事を参考にしてみてください。

発生した事象について

発生した事象について画像

下記内容のdocker-compose.ymlでMySQLを起動した際、ターミナル上に「mbind: Operation not permitted」が出力されました。

 docker-compose.yml

version: '3.8'
services:
  db:
    image: mysql:8.0.33-debian
    environment:
      - TZ=Asia/Tokyo
    volumes:
      - db-data:/var/lib/mysql
    ports:
      - 13306:3306
    env_file:
      - .env

volumes:
  db-data:
    driver: local

 ターミナル上のエラー
エラー表示内容

このエラー原因と対処方法についてまとめました。

「mbind: Operation not permitted」が発生する理由

結論から述べるとMySQL側の問題ではなく、コンテナ上のOSの問題となります。

ターミナル上にエラーは出ているものの、DBには正しくデータが保存されます。

エラーの根本原因となっているのがSeccomp (secure computing mode)です。

Seccompとは

SeccompとはLinuxカーネルの機能の1つであり、プロセスに対してシステムコールを制限することができます。

Dockerではこの機能がデフォルトで有効となっており、特定のシステムコールはデフォルトで実行できなくなっています(参照: Seccomp security profiles for Docker

Seccompによりシステムコールが制限されているため、mbindをコールした際に「mbind: Operation not permitted」が出力されています。

「mbind: Operation not permitted」の対処方法

原因がわかったところで対処方法です。

Seccompにより、デフォルトでは実行できなくなっているmbindを実行できるようにしましょう。

mbindを使用できるようにケイパビリティ「CAP_SYS_NICE」を追加します。

docker-compose.ymlを下記のように修正してください。

 docker-compose.yml

services:
  db:
    ・・・
    env_file:
      - .env
    cap_add: # 追加
      - SYS_NICE

「CAP_SYS_NICE」を設定することにより、mbindを実行する権限が付与され、「mbind: Operation not permitted」が出ないようになります。

参考

最後まで読んでいただき、ありがとうございます。


「mbind Operation not permitted」の対応画像
最新情報をチェックしよう!

Dockerの最新記事8件