Ubuntu 20.04.2 LTSでmysqlコンテナを起動するとPermission deniedで怒られた

データベース

    概要

    Ubuntu 20.04.2 LTSでmysqlコンテナを起動しようとと以下のようなエラーが出てコンテナ起動に失敗する。

    Could not open file '/var/log/mysql/mysql-error.log' for error logging: Permission denied”
    

    dockerfile

    問題が発生したdockerfile。

    docker-compose.yml(一部抜粋)

    version: '3.2'
    services:
      mysql:
        container_name: "example-mysql"
        env_file: ./mysql/.env
        build:
            context: "./mysql"
            dockerfile: "Dockerfile"
        ports:
          - "3306:3306"
        volumes:
          - ./mysql/data:/var/lib/mysql
          - ./mysql/initdb.d:/docker-entrypoint-initdb.d
          - ./mysql/log:/var/log/mysql
    

    Dockerfile

    FROM --platform=linux/amd64 mysql:8.0.26
    
    ADD ./conf.d/my.cnf /etc/mysql/conf.d/my.cnf
    
    CMD ["mysqld"]
    

    マウント元を確認してみる

    $ ls -la mysql
    drwxrwxrwx  7 systemd-coredump example-app 4096 Sep 12 23:10 data
    

    systemd-coredumpという見慣れないユーザーが。

    systemd-coredump

    ホストでユーザーを確認すると、systemd-coredumpはuid 999。

    $ cat /etc/passwd | grep systemd-coredump
    systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
    

    mysqlのコンテナ内のユーザーがuid 999を持っているのがおそらく原因?

    対応

    docker-compose.ymlにuser: 1000:1000を追加。

    docker-compose.yml(一部抜粋)

    version: '3.2'
    services:
      mysql:
        container_name: "example-mysql"
        env_file: ./mysql/.env
        build:
            context: "./mysql"
            dockerfile: "Dockerfile"
        ports:
          - "3306:3306"
        volumes:
          - ./mysql/data:/var/lib/mysql
          - ./mysql/initdb.d:/docker-entrypoint-initdb.d
          - ./mysql/log:/var/log/mysql
        user: 1000:1000
    

    ハードコードしないでホストからuidとgidを渡すようにしたほうが良い気はする。

    所感

    docker for macではこの問題は発生していなかったので、気づくことができてよかった。

    参考


    関連書籍