Ubuntu 20.04.2 LTSでmysqlコンテナを起動しようとと以下のようなエラーが出てコンテナ起動に失敗する。
Could not open file '/var/log/mysql/mysql-error.log' for error logging: Permission denied”
問題が発生した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
は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ではこの問題は発生していなかったので、気づくことができてよかった。