web-dev-qa-db-fra.com

Comment obtenir le bon formatage des variables d'environnement Docker-compose Multiline?

J'ai fait un docker-compose.yaml pour ma pile Wordpress en utilisant l'officiel Wordpress = image et je veux ajouter automatiquement des constantes personnalisées dans le fichier wp-config.php.

En suivant les instructions officielles de l'image, je me retrouve avec ceci:

### 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

Tout fonctionne mais mon OCD ne peut pas s'arrêter jusqu'à ce que je comprenne pourquoi wp-config.php généré ressemble à ceci: WORDPRESS_CONFIG_EXTRA constantes jointes sur une seule ligne:

// 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_');

..au lieu de cela, formaté avec chaque constante étant sur une nouvelle ligne qui est beaucoup plus lisible:

// 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_');

Quelqu'un peut-il me guider sur la façon dont les variables d'environnement multilignes sont gérées dans le fichier docker-compose, en particulier pour la variable WORDPRESS_CONFIG_EXTRA?

J'ai essayé WORDPRESS_CONFIG_EXTRA: | et WORDPRESS_CONFIG_EXTRA: |- mais aucun n'a fonctionné comme je pense.

7
dzhi

Dans votre premier exemple, le dernier élément de la première séquence du document est un scalaire simple (c'est-à-dire sans guillemets simples ou doubles) qui s'étend sur plusieurs lignes. Dans un simple scalaire, les nouvelles lignes sont remplacées par des espaces (et les lignes vides remplacées par une nouvelle ligne).

Donc, si vous voulez des sauts de ligne dans cet élément, vous devez utiliser (en affichant uniquement la partie pertinente):

  - 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

ou:

  - 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

En utilisant |- au lieu de | exclut la nouvelle ligne finale de cet élément. Ce que vous avez essayé (WORDPRESS_CONFIG_EXTRA: |) est quelque chose de complètement différent, car vous divisez l'élément scalaire unique en un mappage avec une seule paire clé-valeur.

Bien que les charges ci-dessus soient des valeurs de chaîne avec des sauts de ligne intégrés, il peut toujours arriver que le traitement effectué par docker-compose, en particulier le passage de choses à un shell, puisse changer les sauts de ligne en espaces.

J'ai également utilisé des programmes où, si vous devez échapper à la nouvelle ligne pour le traitement "suivant" en terminant chaque ligne par une barre oblique inverse (\)

3
Anthon