Dockerコンテナで、SQLコマンドを実行する。

技術解説

Dockerコンテナで、

SQLコマンドを実行する

DockerコンテナでXiboを動かしているときに、Xiboのデータベースの内容をチェックしたり、書き換えたりしたりする必要に迫られたことはありませんか?
筆者もSigme Cloudの開発中に何度もこの状況に遭遇しました。
この問題の解決法がXibo社のブログに紹介されていたので、以下にその翻訳を掲載します。


問題のトラブルシューティング中に、DockerコンテナでデータベースのSQL文を実行するように頼まれたり、あるいは別の目的で自分でSQL文を実行したいと思うことがあるかもしれません。
これらのどちらかを行うには、以下の2つのオプションがあります。

  1. コマンドラインを利用する
  2. PhpMyAdminを使ってGUIで作業する

コマンドラインでの対応

dockerコンテナ内でステートメントを実行する前に、コンテナ名を確認する必要があります。これは、docker psコマンドを使用して行うことができます。

その結果、実行中のdockerコンテナのリストが表示され、そのうちの1つがWebコンテナであることがわかります。フォルダ名によって、以下のように表示されます:

CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS                               NAMES
28a6c69ec7be        xibosignage/xibo-cms:latest       "/entrypoint.sh"         2 weeks ago         Up 16 seconds       0.0.0.0:80->80/tcp                  xibocms_web_1
a8fdca5d77dd        xibosignage/xibo-xmr:latest       "/entrypoint.sh"         2 weeks ago         Up 17 seconds       0.0.0.0:9505->9505/tcp, 50001/tcp   xibocms_xmr_1
a21e1b4c6558        mysql:5.6                         "docker-entrypoint..."   6 weeks ago         Up 17 seconds       0.0.0.0:3315->3306/tcp              xibocms_db_1

コンテナ名の中にwebが含まれているものを探します。上の例では、xibocms_web_1です。そして、以下のようにnameを代入してください:

docker exec -ti name bash

これで、Webコンテナ内にシェルが表示されます。MySQLに接続するために、次のように実行します。

mysql -u cms -h mysql -p cms

パスワードは、Xiboのインストール時にconfig.envで設定したものが使われます。

データを直接変更することは避けてください。そうするとサポートができなくなるからです。多くのテーブルが互いに参照し合っているため、特別な依頼がない限り、直接削除や変更を行うことは危険です。

PhpMyAdminでの対応

PhpMyAdminをDockerコンテナとして追加し、データベースにアクセスする必要があるときに起動・停止できるようにすることができます。

2つのものが必要です。まず、MySQLコンテナの名前ですが、これは上記のコマンドラインの指示通りにdocker psを実行することで得られます。cms-dbが名前に含まれるものが必要です。2つ目は、MySQLコンテナが動作しているネットワークの名前です。これは、docker network lsを実行することで取得できます。

例えば:

  • コンテナ名: xibodocker_cms-db_1
  • ネットワーク名: xibodocker_default

PHPMyAdminを利用するためのポートを選択する必要があります。任意のポート番号を選択できますが、私はXibo専用のシステムのほとんどに適している8080を選択しました

PhpMyAdmin用のDockerコンテナを作成し、以下のステートメントを実行します:

docker run --name phpmyadmin -d --network=xibodocker_default --link xibodocker_cms-db_1:db -p 8080:80 phpmyadmin/phpmyadmin

PHPMyAdmin は 8080 番ポートで動作し、ユーザ名 cms と config.env で指定したパスワードでログインすることになります

PHPMyAdmin を使い終わったら、docker stop phpmyadmin を実行して一時的に停止し (その後、必要に応じて docker start phpmyadmin で再び起動します)、 docker rm phpmyadmin を実行して完全に削除することが可能です。

英語での原本はこちら

コメントを残す