以前の記事で使用していたRancherDesktopのコンテナをWindowsPCではなくMacOSで起動しようとしたところPermission deniedが発生。そのままでは起動できなかったので解決方法を今後のために記録する。
目的
Windows環境で起動していたRancherDesktopのコンテナをMacOS環境でも使用したいがMacOS環境で使用できなくなっていたためこれを解決する。
忙しい人は最終的に採用した解決方法:RancherDesktopの設定を変更する
に進んでください。
環境
MacBookAir M4
Sequoia 15.4.1
RancherDesktop 1.18.2
前提条件
RancherDesktopをインストールしていること
(homebrew で導入しています)
コンテナ起動状況(DockerfileのコマンドでPermission denied)
RancherDesktopを立ち上げ、docker compose up -d
でコンテナを起動する。
起動中のままになってしまっている。
原因を調べるためにcompose.yml
のrestartのコマンドを次のようにコメントアウトする。
#restart: always
その後、再度コンテナを起動する。
$ docker compose up -d
[+] Running 3/3
✔ Network infra_default Created 0.1s
✔ Volume "infra_db_store" Created 0.0s
✔ Container mysql-container Started 0.2s
$ docker compose ps -a
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
mysql-container infra-db "docker-entrypoint.s…" db 28 seconds ago Exited (1) 27 seconds ago
$ docker compose logs
mysql-container | 2025-04-30 16:06:14+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.42-1.el9 started.
mysql-container | chown: changing ownership of '/var/log/mysql': Permission denied
コンテナの起動自体は行なっているがExitedとなっており終了している。
一番最後の行によるとchownでの権限変更ができていないように見える。
Dockerfile内を確認するとメッセージ内容と一致するchownコマンドがある。
RUN mkdir -p /var/log/mysql \
&& chown -hR mysql:mysql /var/log/mysql
今回使用するDockerfile
Win環境で使用していたDockerfile
解決方法(Permission deniedについて)
Permission deniedを解決するにはcompose.yml
にuserの行を追加してください。
以下はcompose.yml
の該当部分。
services:
db:
build: ./db
container_name: mysql-container
+ user: mysql
ports:
- "${FORWARD_DB_PORT:-3306}:3306"
再びdocker compose up -d
で再起動し、ログを確認する。
$ docker compose logs
mysql-container | 2025-05-02 08:35:31+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.42-1.el9 started.
mysql-container | 2025-05-02 08:35:31+00:00 [Note] [Entrypoint]: Initializing database files
mysql-container | 2025-05-02 08:35:33+00:00 [Note] [Entrypoint]: Database files initialized
mysql-container | 2025-05-02 08:35:33+00:00 [Note] [Entrypoint]: Starting temporary server
mysql-container | 2025-05-02 08:35:33+00:00 [Note] [Entrypoint]: Temporary server started.
mysql-container | '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
mysql-container | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
mysql-container | Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
mysql-container | Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
mysql-container | Warning: Unable to load '/usr/share/zoneinfo/tzdata.zi' as time zone. Skipping it.
mysql-container | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
mysql-container | Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
mysql-container | 2025-05-02 08:35:34+00:00 [Note] [Entrypoint]: Creating database mydatabase
mysql-container | 2025-05-02 08:35:34+00:00 [Note] [Entrypoint]: Creating user myuser
mysql-container | 2025-05-02 08:35:34+00:00 [Note] [Entrypoint]: Giving user myuser access to schema mydatabase
mysql-container |
mysql-container | 2025-05-02 08:35:34+00:00 [Note] [Entrypoint]: Stopping temporary server
mysql-container | mysqladmin: [ERROR] unknown variable 'local_infile=1'.
mysql-container | 2025-05-02 08:35:34+00:00 [ERROR] [Entrypoint]: Unable to shut down server.
timezone設定の警告が出ていますがとりあえずPermission denied は解決。
解決方法(unknown variable 'local_infile=1'について)
docker compose build
後の初回起動時にはメッセージが表示されるがビルドを挟まず再度コンテナを起動するとメッセージが表示されず無事にコンテナが起動した。
コンテナの起動に失敗した場合再起動をするようにしたいためcompose.ymlのrestartの項目のコメントアウトを外す。
db:
build: ./db
restart: always
container_name: mysql-container
user: mysql
ports:
再ビルド後コンテナを起動するとコンテナを再起動し、コンテナは稼働中になっていることが確認できた。
$ docker compose logs
mysql-container | 2025-05-10 02:52:02+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.42-1.el9 started.
mysql-container | 2025-05-10 02:52:02+00:00 [Note] [Entrypoint]: Initializing database files
mysql-container | 2025-05-10 02:52:05+00:00 [Note] [Entrypoint]: Database files initialized
mysql-container | 2025-05-10 02:52:05+00:00 [Note] [Entrypoint]: Starting temporary server
mysql-container | 2025-05-10 02:52:05+00:00 [Note] [Entrypoint]: Temporary server started.
mysql-container | '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
mysql-container | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
mysql-container | Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
mysql-container | Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
mysql-container | Warning: Unable to load '/usr/share/zoneinfo/tzdata.zi' as time zone. Skipping it.
mysql-container | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
mysql-container | Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
mysql-container | 2025-05-10 02:52:06+00:00 [Note] [Entrypoint]: Creating database mydatabase
mysql-container | 2025-05-10 02:52:06+00:00 [Note] [Entrypoint]: Creating user myuser
mysql-container | 2025-05-10 02:52:06+00:00 [Note] [Entrypoint]: Giving user myuser access to schema mydatabase
mysql-container |
mysql-container | 2025-05-10 02:52:06+00:00 [Note] [Entrypoint]: Stopping temporary server
mysql-container | mysqladmin: [ERROR] unknown variable 'local_infile=1'.
mysql-container | 2025-05-10 02:52:06+00:00 [ERROR] [Entrypoint]: Unable to shut down server.
mysql-container | 2025-05-10 02:52:07+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.42-1.el9 started.
mysql-container | '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
補足(Permission deniedについて)
こちらの外部記事を参考に解決。
RancherDesktopの公式のサイトの下の方を見ていくとMacの場合はlima,WindowsはWSL2を使用していることが分かる。
WSL2では問題なく起動できていたので参考元にあるようにlimaとWSL2の違いから来ているように見える。
最終的に採用した解決方法:RancherDesktopの設定を変更する
RancherDesktopの設定を変えて解決。
この方法であればcompose.ymlの修正は不要なため採用。
virtiofsを選択。
virtiofsは仮想マシンとホスト間のファイル共有をより高速化できるとのこと。
VZを選択。
Macにあらかじめ実装されている仮想マシンを使用。
RancherDesktopのドキュメントによるとまだ実験的なオプションとのこと。
RancherDesktopをこのように設定するとcompose.ymlを編集しなくとも起動することが確認できた。(この場合でも初回コンテナ起動は失敗するためcompose.ymlにrestart: always
は設定する必要がある。)
override.yamlを使用している場合は削除が必要な模様
最終的に採用した解決方法について
こちらのissueで上がっている解決方法を採用。
(2024.11.21のコメント参照)