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

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

ただいまの
回答率

89.06%

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

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,110

rupyjp

score 8

前提・実現したいこと

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

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

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

コード

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

./wordpress_batch.php

<?php

define('BASEPATH', '/path/to/wordpress');
require_once(BASEPATH . '/wp-load.php');

# バッチ開始
echo "batch test";
var_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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

原因 1

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

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

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

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

if [[ "$1" == apache2* ]] || [ "$1" == php-fpm ]; then
    ...
            awk '
                /^\/\*.*stop editing.*\*\/$/ && c == 0 {
                    c = 1
                    system("cat")
                    if (ENVIRON["WORDPRESS_CONFIG_EXTRA"]) {
                        print "// WORDPRESS_CONFIG_EXTRA"
                        print ENVIRON["WORDPRESS_CONFIG_EXTRA"] "\n"
                    }
                }
                { print }
            ' wp-config-sample.php > wp-config.php <<'EOPHP'

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

原因 2

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

services:
    wordpress:
        ...
        environment:
           WORDPRESS_DB_HOST: "db:3306"

services:
    wordpress:
        ...
        environment:
           WORDPRESS_DB_HOST: db

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

原因 3

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

version: "2"
services:
  # ↓ CLI のサービスを追加します
  cli:
    command: core install --url=http://localhost:9000/ --title=WordPress --admin_user=admin --admin_password=p@ssW0rd --admin_email=example@google.com
    image: wordpress:cli
    depends_on:
      - wordpress
    volumes:
      - web:/var/www/html
  wordpress:
    ports:
      - "9000:80"
    depends_on:
      - db
    environment:
      WORDPRESS_DB_HOST: db
    env_file: .env
    image: wordpress:latest
    volumes:
      # ↓ ディレクトリーを CLI サービスと共有します
      - web:/var/www/html
      - ./:/var/batch/
  db:
    env_file: .env
    image: mysql:5.7.27
    volumes:
      - db-data:/var/lib/mysql
volumes:
  # ↓ volume を追加します
  web:
  db-data:
    driver: local

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

実行結果

$ docker-compose up -d
Creating network "test-php_default" with the default driver
Creating volume "test-php_web" with default driver
Creating test-php_db_1 ... done
Creating test-php_wordpress_1 ... done
Creating test-php_cli_1       ... done
$ docker logs -f test-php_cli_1
sendmail: can't connect to remote host (127.0.0.1): Connection refused
Success: WordPress installed successfully.
Warning: Unable to create directory wp-content/uploads/2020/07. Is its parent directory writable by the server?
$ docker-compose exec wordpress bash
root@2c7b6fca6c89:/var/www/html# php /var/batch/wordpress_batch.php 
batch testobject(wpdb)#2 (61) {
  ["show_errors"]=>
  bool(false)
  ["suppress_errors"]=>
  bool(false)
  ["last_error"]=>
  string(0) ""
  ["num_queries"]=>
  int(36)
  ["num_rows"]=>
  int(0)
  ["rows_affected"]=>
  int(0)
  ["insert_id"]=>
  int(113)
  ["last_query"]=>
  string(80) "SELECT option_value FROM wp_options WHERE option_name = 'theme_switched' LIMIT 1"
  ["last_result"]=>
  array(0) {
  }
  ["result":protected]=>
  object(mysqli_result)#638 (5) {
    ["current_field"]=>
    int(0)
    ["field_count"]=>
    int(1)
    ["lengths"]=>
    NULL
    ["num_rows"]=>
    int(0)
    ["type"]=>
    int(0)
  }

---略---

  ["charset"]=>
  string(7) "utf8mb4"
  ["collate"]=>
  string(22) "utf8mb4_unicode_520_ci"
  ["dbuser":protected]=>
  string(7) "wp_user"
  ["dbpassword":protected]=>
  string(8) "hogehoge"
  ["dbname":protected]=>
  string(9) "wordpress"
  ["dbhost":protected]=>
  string(2) "db"
  ["dbh":protected]=>
  object(mysqli)#3 (19) {
    ["affected_rows"]=>
    int(0)
    ["client_info"]=>
    string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: 7cc7cc96e675f6d72e5cf0f267f48e167c2abb23 $"
    ["client_version"]=>
    int(50012)
    ["connect_errno"]=>
    int(0)
    ["connect_error"]=>
    NULL
    ["errno"]=>
    int(0)
    ["error"]=>
    string(0) ""
    ["error_list"]=>
    array(0) {
    }
    ["field_count"]=>
    int(1)
    ["host_info"]=>
    string(13) "db via TCP/IP"
    ["info"]=>
    NULL
    ["insert_id"]=>
    int(0)
    ["server_info"]=>
    string(6) "5.7.27"
    ["server_version"]=>
    int(50727)
    ["stat"]=>
    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"
    ["sqlstate"]=>
    string(5) "00000"
    ["protocol_version"]=>
    int(10)
    ["thread_id"]=>
    int(4)
    ["warning_count"]=>
    int(0)
  }
  ["func_call"]=>
  string(94) "$db->query("SELECT option_value FROM wp_options WHERE option_name = 'theme_switched' LIMIT 1")"
  ["is_mysql"]=>
  bool(true)
  ["incompatible_modes":protected]=>
  array(6) {
    [0]=>
    string(12) "NO_ZERO_DATE"
    [1]=>
    string(18) "ONLY_FULL_GROUP_BY"
    [2]=>
    string(19) "STRICT_TRANS_TABLES"
    [3]=>
    string(17) "STRICT_ALL_TABLES"
    [4]=>
    string(11) "TRADITIONAL"
    [5]=>
    string(4) "ANSI"
  }
  ["use_mysqli":"wpdb":private]=>
  bool(true)
  ["has_connected":"wpdb":private]=>
  bool(true)
  ["categories"]=>
  string(13) "wp_categories"
  ["post2cat"]=>
  string(11) "wp_post2cat"
  ["link2cat"]=>
  string(11) "wp_link2cat"
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る