1. ホーム
  2. mysql

[解決済み] MySQLのセットアップとDockerfile内のダンプのインポート

2022-05-13 11:21:32

質問

LAMPプロジェクトのためにDockerfileをセットアップしようとしていますが、MySQLを起動する際にいくつかの問題があります。私のDockerfileに次の行があります。

VOLUME ["/etc/mysql", "/var/lib/mysql"]
ADD dump.sql /tmp/dump.sql
RUN /usr/bin/mysqld_safe & sleep 5s
RUN mysql -u root -e "CREATE DATABASE mydb"
RUN mysql -u root mydb < /tmp/dump.sql

しかし、このエラーが出続けています。

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)

Dockerfileのビルド中にデータベースの作成とダンプのインポートを設定する方法について、何かアイデアはありますか?

どのように解決するのですか?

それぞれ RUN の各命令は Dockerfile は別のレイヤーで実行されます(説明は のドキュメントで説明されています。 RUN ).

あなたの Dockerfile には、3つの RUN の命令があります。問題は、MySQLサーバーが最初の1つでしか起動しないことです。他では MySQL は起動しておらず、そのため mysql クライアントで接続エラーが発生します。

この問題を解決するために、2つのソリューションがあります。

解決策1:1行の RUN

RUN /bin/bash -c "/usr/bin/mysqld_safe --skip-grant-tables &" && \
  sleep 5 && \
  mysql -u root -e "CREATE DATABASE mydb" && \
  mysql -u root mydb < /tmp/dump.sql

解決策2:スクリプトを使用する

実行可能なスクリプトを作成する init_db.sh :

#!/bin/bash
/usr/bin/mysqld_safe --skip-grant-tables &
sleep 5
mysql -u root -e "CREATE DATABASE mydb"
mysql -u root mydb < /tmp/dump.sql

これらの行を Dockerfile :

ADD init_db.sh /tmp/init_db.sh
RUN /tmp/init_db.sh