0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windows環境で使用していたコンテナがMac環境では起動しなくなった時に試したこと

Last updated at Posted at 2025-05-10

以前の記事で使用していた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でコンテナを起動する。

スクリーンショット 2025-05-10 10.45.21.png
起動中のままになってしまっている。
原因を調べるために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'

スクリーンショット 2025-05-10 11.56.46.png

補足(Permission deniedについて)

こちらの外部記事を参考に解決。

RancherDesktopの公式のサイトの下の方を見ていくとMacの場合はlima,WindowsはWSL2を使用していることが分かる。

WSL2では問題なく起動できていたので参考元にあるようにlimaとWSL2の違いから来ているように見える。

最終的に採用した解決方法:RancherDesktopの設定を変更する

RancherDesktopの設定を変えて解決。
この方法であればcompose.ymlの修正は不要なため採用。

スクリーンショット 2025-05-10 21.39.13.png
Preferencesを選択。

スクリーンショット 2025-05-10 22.07.34.png
virtiofsを選択。
virtiofsは仮想マシンとホスト間のファイル共有をより高速化できるとのこと。

スクリーンショット 2025-05-10 22.16.57.png
VZを選択。
Macにあらかじめ実装されている仮想マシンを使用。
RancherDesktopのドキュメントによるとまだ実験的なオプションとのこと。
RancherDesktopをこのように設定するとcompose.ymlを編集しなくとも起動することが確認できた。(この場合でも初回コンテナ起動は失敗するためcompose.ymlにrestart: alwaysは設定する必要がある。)

override.yamlを使用している場合は削除が必要な模様

最終的に採用した解決方法について

こちらのissueで上がっている解決方法を採用。
(2024.11.21のコメント参照)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?