お助け案件「No2」 DockerでWordpress構築でデータベースの接続が上手く行かない!エラーが出る
DockerでWordpressを構築する場合 ① MySQL の準備 ② Wordpress のPHPソースの準備 ③ セットアップ とう流れが標準ですが「MySQLのホスト名は〇〇にしたい」「データベース名は○○にしたい」等の場合の Docker run のパラメータについて お助けです。
ポイント:
docker run --link <DBのコンテナ名>:MySQLのホスト名 が ポイントになりました。
又MySQLのコンテナのホスト名は コンテナIDでした。コンテナIDは docker ps で確認出来ますので場合によっては コンテナID をMySQLのホスト名としても良い訳です。
Docker hub の 公式リポジトリー等の 記載
docker pull で公式リポジトリーのイメージを Pull したとします。
では docker run は
docker run --name <任意の名前 dbsv1 > -e MYSQL_ROOT_PASSWORD=<秘密のパスワード> -d mysql:<tag 5.7.23とか>
次に dbsv1 という名前で作成したMySQLのコンテナと WordpressのコンテナをLinkします
docker run --name <任意の名前 apsv1 > --link <上でrunした名前 dbsv1 >:mysql -d -p 8080:80 wordpress:<tag php7.2 など>
動かすと http://localhost:8080 すぐサイトの構築設定になります。
もう少し具体的に書くと
前提: docker イメージは mysql:5.7.23 wordpress:php7.2 Mysqlは dbsv1 MySQLのroot パスワードを pass123 Wordpressのコンテナ名をapsv1 Link するホスト名を mysql とすると wordpress のコンテナをRunする時に wordpress という標準のデータベースを作ってるようです。 これを踏まえて もうちど コンテナ作成のまでの一連の流れを 書きだします。
- docker pull mysql:5.7.23
- docker pull wordpress:php7.2
- docker run --name dbsv1 -e MYSQL_ROOT_PASSWORD=pass123 -d mysql:5.7.23
- docker run --name apsv1 --link dbsv1:mysql -d -p 8080:80 wordpress:php7.2
例えば Windows10 のローカルで docker を使っていれば http://localhost:8080 で 言語を指定すると すぐ ようこそ の画面でサイトの設定画面になります。
ここで 前提を MySQLのホストは コンテナの名前と同じでは無くては だめだ!
データベースはデフォルト以外でなくてはだめ! wp-mydb にする 要望がでたら
ローカルには apache等のサーバーは入ってないから http://localhost で やりたい
- docker pull mysql:5.7.23
- docker pull wordpress:php7.2
- docker run --name dbsv1 -e MYSQL_ROOT_PASSWORD=pass123 -e MYSQL_DATABASE=wp-mydb -d mysql:5.7.23
- docker run --name apsv1 --link dbsv1:dbsv1l -d -p 80:80 wordpress:php7.2
3行目に -e MYSQL_DATABASE で データベース名を記載
4行目の dbsv1:dbsv1 --link の後ろの コンテナ名の後ろの:dbsv1 が ホスト名 になる様 また 80ポートが使われてないなら 80:80 で http://localhost で 動かす事が出来ます。
また wordpress 側の -e 環境変数で データベースを指定する事も出来ます。
これですと 言語選択 → データベースの設定 → ようこそ サイトの設定 と なります。
もちろん docker ps のコンテナID をMySQLのホスト名に入れても 大丈夫です。 localhost は ダメです!
こんな お助けでした