質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

1回答

2141閲覧

WordpressのBatchプログラムをDockerで走らせたい

rupyjp

総合スコア8

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2017/07/09 11:55

編集2017/07/09 12:12

###前提・実現したいこと

WordpressのDockerイメージを使ってコマンドラインからとてもかんたんなバッチを走らせたいと思っています。

試しに、コンテナの中に入って実行したのですが何も出力がされません。
何か問題ありでしょうか。
特に複雑なことはしていません。

どうやらDockerの環境が通常のWordpressの環境と違うことが問題のような気がしています。
ちなみにこのコードをDocker以外のWordpressで実行した場合には正常に動きました。

###コード

echoをして、$wpdbをvardumpするだけです。

./wordpress_batch.php

php

1<?php 2 3define('BASEPATH', '/path/to/wordpress'); 4require_once(BASEPATH . '/wp-load.php'); 5 6# バッチ開始 7echo "batch test"; 8var_dump($wpdb);

./docker-compose.yml:

version: "2" services: wordpress: build: containers/wordpress ports: - "9000:80" depends_on: - db environment: WORDPRESS_DB_HOST: "db:3306" env_file: .env volumes: - ./:/var/batch/ db: build: containers/db env_file: .env volumes: - db-data:/var/lib/mysql volumes: db-data: driver: local

./containers/db/Dockerfile:

FROM mysql:latest

./containers/wordpress/Dockerfile:

FROM wordpress:latest

./.env

WORDPRESS_DB_NAME=wordpress WORDPRESS_DB_USER=wp_user WORDPRESS_DB_PASSWORD=hogehoge MYSQL_RANDOM_ROOT_PASSWORD=yes MYSQL_DATABASE=wordpress MYSQL_USER=wp_user MYSQL_PASSWORD=hogehoge

###試したこと

直接コンテナの中に入ってPHPコマンドを叩いています。

docker-compose up -d docker-compose run wordpress bash root@97658bd14387:/var/batch# php wordpress_batch.php

以上解決策ありましたらどうぞよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

原因 1

docker-compose run ではなく、 docker-compose exec を使います:

console

1docker-compose up -d 2docker-compose exec wordpress bash

docker-compose run は wordpress のサービスを作り直してしまう上、
実行コマンドを bash にしてしまいます

[WordPress イメージ](ENTRYPOINT ["docker-entrypoint.sh"])の ENTRYPOINT に指定されている docker-entrypoint.sh では
コマンドが apache2 から始まっているか、php-fpm のときしか
wp-config.php を作成しません:

bash

1if [[ "$1" == apache2* ]] || [ "$1" == php-fpm ]; then 2 ... 3 awk ' 4 /^/*.*stop editing.**/$/ && c == 0 { 5 c = 1 6 system("cat") 7 if (ENVIRON["WORDPRESS_CONFIG_EXTRA"]) { 8 print "// WORDPRESS_CONFIG_EXTRA" 9 print ENVIRON["WORDPRESS_CONFIG_EXTRA"] "\n" 10 } 11 } 12 { print } 13 ' wp-config-sample.php > wp-config.php <<'EOPHP'

wp-config.php が存在しないことが原因で wp-load.php で die() していました

原因 2

docker-compose.yml を次のように修正します:

yaml

1services: 2 wordpress: 3 ... 4 environment: 5 WORDPRESS_DB_HOST: "db:3306"

yaml

1services: 2 wordpress: 3 ... 4 environment: 5 WORDPRESS_DB_HOST: db

設定が正しくないため、データベースへの接続に失敗していました

原因 3

docker-compose.yml を次のように修正します:

yaml

1version: "2" 2services: 3 # ↓ CLI のサービスを追加します 4 cli: 5 command: core install --url=http://localhost:9000/ --title=WordPress --admin_user=admin --admin_password=p@ssW0rd --admin_email=example@google.com 6 image: wordpress:cli 7 depends_on: 8 - wordpress 9 volumes: 10 - web:/var/www/html 11 wordpress: 12 ports: 13 - "9000:80" 14 depends_on: 15 - db 16 environment: 17 WORDPRESS_DB_HOST: db 18 env_file: .env 19 image: wordpress:latest 20 volumes: 21 # ↓ ディレクトリーを CLI サービスと共有します 22 - web:/var/www/html 23 - ./:/var/batch/ 24 db: 25 env_file: .env 26 image: mysql:5.7.27 27 volumes: 28 - db-data:/var/lib/mysql 29volumes: 30 # ↓ volume を追加します 31 web: 32 db-data: 33 driver: local

WordPress のインストールが完了していなかったため、
wp-settings.phpwp_not_installed() で die() していました

実行結果

console

1$ docker-compose up -d 2Creating network "test-php_default" with the default driver 3Creating volume "test-php_web" with default driver 4Creating test-php_db_1 ... done 5Creating test-php_wordpress_1 ... done 6Creating test-php_cli_1 ... done 7$ docker logs -f test-php_cli_1 8sendmail: can't connect to remote host (127.0.0.1): Connection refused 9Success: WordPress installed successfully. 10Warning: Unable to create directory wp-content/uploads/2020/07. Is its parent directory writable by the server? 11$ docker-compose exec wordpress bash 12root@2c7b6fca6c89:/var/www/html# php /var/batch/wordpress_batch.php 13batch testobject(wpdb)#2 (61) { 14 ["show_errors"]=> 15 bool(false) 16 ["suppress_errors"]=> 17 bool(false) 18 ["last_error"]=> 19 string(0) "" 20 ["num_queries"]=> 21 int(36) 22 ["num_rows"]=> 23 int(0) 24 ["rows_affected"]=> 25 int(0) 26 ["insert_id"]=> 27 int(113) 28 ["last_query"]=> 29 string(80) "SELECT option_value FROM wp_options WHERE option_name = 'theme_switched' LIMIT 1" 30 ["last_result"]=> 31 array(0) { 32 } 33 ["result":protected]=> 34 object(mysqli_result)#638 (5) { 35 ["current_field"]=> 36 int(0) 37 ["field_count"]=> 38 int(1) 39 ["lengths"]=> 40 NULL 41 ["num_rows"]=> 42 int(0) 43 ["type"]=> 44 int(0) 45 } 46 47---略--- 48 49 ["charset"]=> 50 string(7) "utf8mb4" 51 ["collate"]=> 52 string(22) "utf8mb4_unicode_520_ci" 53 ["dbuser":protected]=> 54 string(7) "wp_user" 55 ["dbpassword":protected]=> 56 string(8) "hogehoge" 57 ["dbname":protected]=> 58 string(9) "wordpress" 59 ["dbhost":protected]=> 60 string(2) "db" 61 ["dbh":protected]=> 62 object(mysqli)#3 (19) { 63 ["affected_rows"]=> 64 int(0) 65 ["client_info"]=> 66 string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: 7cc7cc96e675f6d72e5cf0f267f48e167c2abb23 $" 67 ["client_version"]=> 68 int(50012) 69 ["connect_errno"]=> 70 int(0) 71 ["connect_error"]=> 72 NULL 73 ["errno"]=> 74 int(0) 75 ["error"]=> 76 string(0) "" 77 ["error_list"]=> 78 array(0) { 79 } 80 ["field_count"]=> 81 int(1) 82 ["host_info"]=> 83 string(13) "db via TCP/IP" 84 ["info"]=> 85 NULL 86 ["insert_id"]=> 87 int(0) 88 ["server_info"]=> 89 string(6) "5.7.27" 90 ["server_version"]=> 91 int(50727) 92 ["stat"]=> 93 string(134) "Uptime: 218 Threads: 1 Questions: 678 Slow queries: 0 Opens: 116 Flush tables: 1 Open tables: 109 Queries per second avg: 3.110" 94 ["sqlstate"]=> 95 string(5) "00000" 96 ["protocol_version"]=> 97 int(10) 98 ["thread_id"]=> 99 int(4) 100 ["warning_count"]=> 101 int(0) 102 } 103 ["func_call"]=> 104 string(94) "$db->query("SELECT option_value FROM wp_options WHERE option_name = 'theme_switched' LIMIT 1")" 105 ["is_mysql"]=> 106 bool(true) 107 ["incompatible_modes":protected]=> 108 array(6) { 109 [0]=> 110 string(12) "NO_ZERO_DATE" 111 [1]=> 112 string(18) "ONLY_FULL_GROUP_BY" 113 [2]=> 114 string(19) "STRICT_TRANS_TABLES" 115 [3]=> 116 string(17) "STRICT_ALL_TABLES" 117 [4]=> 118 string(11) "TRADITIONAL" 119 [5]=> 120 string(4) "ANSI" 121 } 122 ["use_mysqli":"wpdb":private]=> 123 bool(true) 124 ["has_connected":"wpdb":private]=> 125 bool(true) 126 ["categories"]=> 127 string(13) "wp_categories" 128 ["post2cat"]=> 129 string(11) "wp_post2cat" 130 ["link2cat"]=> 131 string(11) "wp_link2cat" 132}

投稿2020/07/09 18:39

y_shinoda

総合スコア3272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問