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ではこの問題は発生していなかったので、気づくことができてよかった。

参考


関連書籍