wordpress - 如何获得正确的 docker-compose Multiline 环境变量格式?
问题描述
我使用官方 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
一切正常,但我的强迫症不能休息,直到我弄清楚为什么生成的 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_');
..而不是像这样,格式化为每个常量都在新行上,这更易读:
// 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_');
谁能指导我如何在 docker-compose 文件中处理多行环境变量,特别是WORDPRESS_CONFIG_EXTRA变量?
我尝试过WORDPRESS_CONFIG_EXTRA: |
,WORDPRESS_CONFIG_EXTRA: |-
但没有一个按我认为应该的方式工作。
解决方案
在您的第一个示例中,文档的第一个序列的最后一个元素是一个普通的标量(即没有单引号或双引号),它延伸到多行。在纯标量中,换行符被空格替换(空行被换行符替换)。
因此,如果您想在该元素中使用换行符,则应使用(仅显示相关部分):
- 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 完成的处理,特别是向 shell 传递内容,可以将换行符更改为空格。
我还使用了一些程序,如果您可能必须通过以反斜杠 ( \
)结束每一行来转义“后续”处理的换行符
推荐阅读
- angularjs - 如何获取 listRetainerPaymentUnit 中的 idRetainer?
- docker - 重定位错误 - 找不到符号 - 构建 docker-fpm-alpine 映像
- javascript - 每分钟重新排列行的方法
- node.js - 将字符串转换为字典
- python-3.x - Python 解码 utf
- testing - Katalon Studio:WebUI.verifyElementText 看不到元素中的文本
- entity-framework - 实体框架需要可选
- user-interface - 如何在没有 BIOS 的情况下在屏幕上绘制像素?
- sql - 如何有条件地为某些字段选择一行,输出中的最小最大日期
- jxbrowser - 是否可以在不需要 Internet 连接的情况下访问 JavaScript 库?