DockerでMariaDBを起動する際のエラー「Error starting mariadb」の対処法
Docker Compose で MariaDB が起動しない場合のエラーとその解決方法
症状
Error starting mariadb: (1) Can't start service mariadb: OCI runtime error: container_linux.go:380: starting container process caused "process_linux.go:428: container init caused \"fork/exec /docker-entrypoint.sh: permission denied\""
原因
このエラーは、MariaDB コンテナの起動に必要なファイルのパーミッションが不足していることが原因です。具体的には、以下のファイルのパーミッションが関係しています。
/docker-entrypoint.sh
/etc/my.cnf
解決方法
以下の方法で、それぞれのファイルのパーミッションを設定します。
以下のコマンドを実行して、/docker-entrypoint.sh
ファイルに実行権限を与えます。
docker run --rm --entrypoint sh mariadb:latest chmod +x /docker-entrypoint.sh
/etc/my.cnf のパーミッション設定
以下のコマンドを実行して、/etc/my.cnf
ファイルの所有者を root
に変更します。
docker run --rm --entrypoint sh mariadb:latest chown root /etc/my.cnf
その他の確認事項
- 使用している MariaDB のバージョンによっては、上記の解決方法でうまくいかない場合があります。その場合は、MariaDB の公式ドキュメントを参照してください。
- ネットワークの設定など、他の問題が原因でエラーが発生している可能性もあります。詳細は、エラーメッセージの内容をよく確認してください。
補足
- 上記の解決方法は、あくまで一般的なものです。環境によっては、異なる解決方法が必要になる場合があります。
- 問題解決のためには、エラーメッセージの内容をよく理解することが重要です。
- 必要に応じて、専門家に相談することをおすすめします。
docker-compose.yml
version: '3'
services:
mariadb:
image: mariadb:latest
ports:
- "3306:3306"
volumes:
- ./data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: "password"
Dockerfile
FROM mariadb:latest
ENV MYSQL_ROOT_PASSWORD password
RUN echo "bind-address = 0.0.0.0" >> /etc/my.cnf.d/mariadb.cnf
CMD ["mysqld"]
上記の設定で、docker-compose up
コマンドを実行すると、MariaDB コンテナが起動します。
補足
- 上記のサンプルコードは、基本的な設定のみ記載しています。詳細は、MariaDB の公式ドキュメントを参照してください。
- 環境に合わせて、設定を適宜変更する必要があります。
その他の解決方法
MariaDB のバージョンを変更する
古いバージョンの MariaDB では、上記の解決方法でうまくいかない場合があります。その場合は、最新バージョンなどの別のバージョンを試してみてください。
Docker の設定を変更する
docker run
コマンドを実行時に、以下のオプションを指定することで、ファイルのパーミッション設定を変更できます。
--user
オプション: コンテナ内で実行されるユーザーを指定
マウントボリュームを使用する
/docker-entrypoint.sh
ファイルや /etc/my.cnf
ファイルをホストマシンからマウントすることで、パーミッション設定を変更する必要がなくなります。
docker-compose.yml
ファイルで、volumes
セクションを使用して、/docker-entrypoint.sh
ファイルや /etc/my.cnf
ファイルをマウントできます。
X 0
docker mariadb