#Dockerの外からmysql内でコマンドをを実行する
Bash上からDockerコンテナ内のmysqlにコマンドを送りたかったときに四苦八苦しましたので、備忘録として残します。
##環境
Ubuntu 18.04 LTS
Docker 19.03
MYSQLコンテナのMYSQLバージョン 5.7
ホストの/usr/share/zoneinfoがコンテナ内の/usr/share/zoneinfoにバインドされている
##やりたい事
MySQLドキュメント:タイムゾーンのロード にある以下のコマンドをコンテナ外から実行したい
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
コンテナ形式で提供される海外製のプログラムを組み込む際に、構築をスクリプトにしたかった
手順内でmysqlにタイムゾーンをロードする処理がボトルネックになった
手動で実行すると以下のコマンドに
sudo docker exec -it {mysqlコンテナ名} bash
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
exit
mysql -u root mysql の1番目のmysqlがコマンドで、2番目のmysqlが、mysqlというデータベース名だという事に気づくまでに時間がかかった
出来上がったのが以下。
sudo docker exec -it {mysqlコンテナ名} sh -c 'mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uroot -p{パスワード} mysql -P 3306'
本当はパスワードをスクリプト内に書きたくないので、良い方法をご存じの方、ご教示いただけますと幸いです。