DockerのOperation not permittedというエラーに対応する

DockerのOperation not permittedというエラーに対応するの原因と解決方法について解説します。

Read in: en
DockerのOperation not permittedというエラーに対応する

概要

Docker Composeを使ってgolangのtest実行していたら、Operation not permittedというエラーに遭遇した。

対応

Docker Documentation - runtaime-privilege-and-linux-capabilities

Dockerコンテナの特権設定をいじると解決する。

  gobel_test_db:
    container_name: "gobel_test_db"
    build: ./docker/mysql
    ports:
      - "3305:3306"
    volumes:
      - mysql_gobel_test_db:/var/lib/mysql:delegated
      - ./docker/mysql/initdb.d/gobel_test_db:/docker-entrypoint-initdb.d
    environment:
      - MYSQL_DATABASE=gobel_test
      - MYSQL_ROOT_PASSWORD=password
    privileged: true  // add a this option

上記だとセキュリティ的にどうなのかイマイチよくわかっていないので、もう少し権限を絞るような設定にした。

  gobel_test_db:
    container_name: "gobel_test_db"
    build: ./docker/mysql
    ports:
      - "3305:3306"
    volumes:
      - mysql_gobel_test_db:/var/lib/mysql:delegated
      - ./docker/mysql/initdb.d/gobel_test_db:/docker-entrypoint-initdb.d
    environment:
      - MYSQL_DATABASE=gobel_test
      - MYSQL_ROOT_PASSWORD=password
    cap_add:
      - SYS_ADMIN
    security_opt:
      - seccomp:unconfined

cap_addはLinux capabilitiesを追加するオプションで、ここではsystem administration operationsの権限を追加している。

Linux capabilitiesはスーパーユーザーの権限を細分化する機能。

seccompはLinuxカーネルのシステムコール発行の制限をするセキュリティ関連の機能。

ここでは、unconfined、無効化の設定をしている。

unconfinedは直訳すると"監禁されていない"という意味らしい。

所感

speakerdeck - コンテナ完全に理解した

コンテナことは前にちらっと勉強したが、まだまだ理解が浅い。

参考

Tags: Docker Docker Compose Linux linux capabilities seccomp Tips
Share: 𝕏 Post Facebook Hatena
✏️ View source / Discuss on GitHub
☕ サポート

このブログを応援していただける方は、以下からサポートをお願いします。いただいたサポートはブログ運営・技術研鑽に活用します。


関連記事