Docker での SQL エラー

Docker での SQL エラー

私の目標は、Dockerfile でいくつかのコマンドを実行して、SQL ユーザーを作成し、そのユーザーに権限を付与することです。そのため、次の操作を行います。

FROM ubuntu:18.04
...
RUN apt-get install -y apache2
RUN apt-get install -y mysql-server
RUN mysql -Bse "CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'testpass';"
RUN mysql -Bse "GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'localhost';"

これは最初のmysqlコマンドでクラッシュします

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

ただし、StackExchange を通じて、Dockerfile から sql コマンドを削除し、実行中のコンテナーで docker exec を使用してログインすると、次の解決策が機能することがわかりました。

service apache2 stop
service mysql stop
service mysql start
service apache2 start
mysql -Bse "CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'testpass';"
mysql -Bse "GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'localhost';"

すべてのコマンドを Dockerfile に含めたいため、上記のservice stop/start解決策を試しましたが、Dockerfile からは機能せず、すでに実行中のコンテナで exec を実行した後にのみ機能します。別の解決策が必要だと思います。

docker exec で手動で実行せずに、これらの SQL コマンドの実行を自動化するにはどうすればよいですか? ありがとうございます

PS: この質問が別の Stack Exchange サイトに適しているかどうかお知らせください。

答え1

この問題は、すべての RUN コマンドが異なるレイヤーで実行されていることに関係しています。解決策は、関連するすべてのコマンドを bash スクリプト init_db.sh ファイルに追加し、Dockerfile で実行することでした。

#!/bin/bash

service apache2 stop
service mysql stop
service mysql start
service apache2 start

mysql -Bse "CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'testpass';"
mysql -Bse "GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'localhost';"
ADD init_db.sh /tmp/init_db.sh
RUN /tmp/init_db.sh

ソース:https://stackoverflow.com/questions/25920029/mysql の設定と dockerfile 内でのダンプのインポート

関連情報