web-dev-qa-db-ja.com

適切なdocker-compose Multiline環境変数のフォーマットを取得するにはどうすればよいですか?

Wordpressスタックを使用してdocker-compose.yamlを作成しましたWordpress画像を使用して、 wp-config.phpファイルにいくつかのカスタム定数を自動的に追加します。

公式の画像の指示に従うことで、私はこれで終わります:

### Web Application
  wordpress:
    container_name: 'wordpress'
    image: 'wordpress:php7.2-fpm-Alpine'
    user: 1001:1001
    environment:
      - WORDPRESS_DB_Host=mysql
      - WORDPRESS_DB_USER=something
      - WORDPRESS_DB_NAME=something
      - WORDPRESS_DB_PASSWORD=xxxxxxxxxxxxxxx
      - WORDPRESS_DEBUG=1
      - WORDPRESS_CONFIG_EXTRA=
          define( 'WP_REDIS_CLIENT', 'predis' );
          define( 'WP_REDIS_SCHEME', 'tcp' );
          define( 'WP_REDIS_Host', 'redis' );
          define( 'WP_REDIS_PORT', '6379' );
          define( 'WP_REDIS_PASSWORD', 'xxxxxxxxxxxxxxx' );
          define( 'WP_REDIS_DATABASE', '0' );
          define( 'WP_REDIS_MAXTTL', '21600' );
          define( 'WP_CACHE_KEY_SALT', 'xx_ ');
          define( 'WP_REDIS_SELECTIVE_FLUSH', 'xx_ ');
          define( 'WP_AUTO_UPDATE_CORE', false );
    volumes:
      - ./wordpress:/var/www/html
      - ./logs/php:/var/logs/php
      - ./config/php/www.conf:/usr/local/etc/php-fpm.d/www.conf:ro
    networks:
      - frontend
      - backend
    restart: always
    depends_on:
      - mysql

すべてが機能しますが、生成されたwp-config.phpが次のようになる理由がわかるまで、私のOCDは休むことができません。WORDPRESS_CONFIG_EXTRA定数が1行で結合されています

// WORDPRESS_CONFIG_EXTRA
define('WP_REDIS_CLIENT', 'predis'); define('WP_REDIS_SCHEME', 'tcp'); define('WP_REDIS_Host', 'redis'); define('WP_REDIS_PORT', '6379'); define('WP_REDIS_PASSWORD', 'xxxxxxxxxxxxxxx'); define('WP_REDIS_DATABASE', '0'); define('WP_REDIS_MAXTTL', '21600'); define('WP_CACHE_KEY_SALT', 'xx_'); define('WP_REDIS_SELECTIVE_FLUSH', 'xx_');

..このようにではなく、各定数が新しい行にあるようにフォーマットされています。

// WORDPRESS_CONFIG_EXTRA
define('WP_REDIS_CLIENT', 'predis');
define('WP_REDIS_SCHEME', 'tcp');
define('WP_REDIS_Host', 'redis');
define('WP_REDIS_PORT', '6379');
define('WP_REDIS_PASSWORD', 'xxxxxxxxxxxxxxx');
define('WP_REDIS_DATABASE', '0');
define('WP_REDIS_MAXTTL', '21600');
define('WP_CACHE_KEY_SALT', 'xx_');
define('WP_REDIS_SELECTIVE_FLUSH', 'xx_');

特にWORDPRESS_CONFIG_EXTRA変数について、Docker-composeファイルで複数行の環境変数がどのように処理されるかを誰かが私に案内できますか?

私は試した WORDPRESS_CONFIG_EXTRA: |およびWORDPRESS_CONFIG_EXTRA: |-しかし、私が思うように機能するものはありませんでした。

7
dzhi

最初の例では、ドキュメントの最初のシーケンスの最後の要素は、複数行にまたがる プレーンスカラー (つまり、単一引用符も二重引用符もありません)です。プレーンスカラーでは、改行はスペースに置き換えられます(空の行は改行に置き換えられます)。

したがって、その要素内で改行が必要な場合は、使用する必要があります(関連部分のみを表示):

  - WORDPRESS_DB_PASSWORD=xxxxxxxxxxxxxxx
  - WORDPRESS_DEBUG=1
  - WORDPRESS_CONFIG_EXTRA=

      define( 'WP_REDIS_CLIENT', 'predis' );

      define( 'WP_REDIS_SCHEME', 'tcp' );

      define( 'WP_REDIS_Host', 'redis' );

      define( 'WP_REDIS_PORT', '6379' );

      define( 'WP_REDIS_PASSWORD', 'xxxxxxxxxxxxxxx' );

      define( 'WP_REDIS_DATABASE', '0' );

      define( 'WP_REDIS_MAXTTL', '21600' );

      define( 'WP_CACHE_KEY_SALT', 'xx_ ');

      define( 'WP_REDIS_SELECTIVE_FLUSH', 'xx_ ');

      define( 'WP_AUTO_UPDATE_CORE', false );
volumes:
  - ./wordpress:/var/www/html

または:

  - WORDPRESS_DB_PASSWORD=xxxxxxxxxxxxxxx
  - WORDPRESS_DEBUG=1
  - |
    WORDPRESS_CONFIG_EXTRA=
    define( 'WP_REDIS_CLIENT', 'predis' );
    define( 'WP_REDIS_SCHEME', 'tcp' );
    define( 'WP_REDIS_Host', 'redis' );
    define( 'WP_REDIS_PORT', '6379' );
    define( 'WP_REDIS_PASSWORD', 'xxxxxxxxxxxxxxx' );
    define( 'WP_REDIS_DATABASE', '0' );
    define( 'WP_REDIS_MAXTTL', '21600' );
    define( 'WP_CACHE_KEY_SALT', 'xx_ ');
    define( 'WP_REDIS_SELECTIVE_FLUSH', 'xx_ ');
    define( 'WP_AUTO_UPDATE_CORE', false );
volumes:
  - ./wordpress:/var/www/html

|-の代わりに|を使用すると、その要素から最後の改行が除外されます。単一のスカラー要素を単一のキーと値のペアを持つマッピングに分割するため、試したもの(WORDPRESS_CONFIG_EXTRA: |)はまったく異なるものです。

上記は、改行が埋め込まれた文字列値としてロードされますが、docker-composeによって行われた処理、特にシェルに渡すことにより、改行がスペースに変更される可能性があります。

また、「次の」処理のために改行をエスケープする必要がある場合に、各行をバックスラッシュ(\)で終了するプログラムを使用しました。

3
Anthon