如何获取正确的docker-compose多行环境变量格式?

dzh*_*zhi 4 wordpress yaml docker dockerfile docker-compose

我使用正式的Wordpress图像为Wordpress堆栈制作了docker-compose.yaml,我想在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
Run Code Online (Sandbox Code Playgroud)

一切正常,但是我的OCD无法休息,直到我弄清楚为什么生成的wp-config.php看起来像这样:WORDPRESS_CONFIG_EXTRA常量以一行形式连接:

// 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_');
Run Code Online (Sandbox Code Playgroud)

..而不是像这样,其格式为每个常量都位于换行符上,这更易读:

// 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_');
Run Code Online (Sandbox Code Playgroud)

谁能指导我如何在docker -compose文件中处理多行环境变量,特别是WORDPRESS_CONFIG_EXTRA变量?

我尝试过WORDPRESS_CONFIG_EXTRA: |WORDPRESS_CONFIG_EXTRA: |-但没有一个按照我认为的方式工作。

fre*_*dev 15

我更喜欢使用稍微不同的语法并尝试使用>. 这。如果您需要在环境变量中包含 json,那么解决方案效果很好。有很多方法可以在 YAML 中使用多行字符串

version: '2'
services:
  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 );
      CONFIG_ABC: >
          {
            "database": {
               "catalog": {
                   "credentials": {
                       "username": "scott",
                       "password": "tiger",
                       "datbase": "catalog",
                       "host": "gn.dmfkd.lan"
                    }
                }
            }
          }
      CONFIG_DEF: >
          {
            "urlRegex": "/.*",
            "script": {
              "scriptPath": "example-python-app.py"
            },
            "runtime": "python27",
            "threadsafe": true,
          }
    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
Run Code Online (Sandbox Code Playgroud)


Ant*_*hon 8

在您的第一个示例中,文档第一个序列的最后一个元素是一个纯标量(即,没有单引号或双引号),该标量跨多行。在普通标量中,换行符用空格替换(空行替换为换行符)。

因此,如果要在该元素中使用换行符,则应使用(仅显示相关部分):

  - 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
Run Code Online (Sandbox Code Playgroud)

要么:

  - 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
Run Code Online (Sandbox Code Playgroud)

使用|-而不是|从该元素中排除最后的换行符。您尝试的(WORDPRESS_CONFIG_EXTRA: |)完全不同,因为您将单个标量元素拆分为具有单个键值对的映射。

尽管上述加载为带有嵌入式换行符的字符串值,但仍然可能发生由docker-compose完成的处理(尤其是将内容传递给shell)可以将换行符更改为空格。

我还使用了一些程序,在这些程序中,如果可能必须通过在每行后加一个反斜杠(\)来换行,以进行“跟随”处理

  • 您是否知道如何将多行var放在.env中?我尝试过的任何方法都失败了:/ (3认同)