Wordpress 如何获得正确的docker compose多行环境变量格式?
我使用官方Wordpress图像为我的Wordpress堆栈制作了一个docker-compose.yaml,我想在wp-config.php文件中自动添加一些自定义常量 按照官方形象说明,我最终得出以下结论:Wordpress 如何获得正确的docker compose多行环境变量格式?,wordpress,docker,docker-compose,yaml,dockerfile,Wordpress,Docker,Docker Compose,Yaml,Dockerfile,我使用官方Wordpress图像为我的Wordpress堆栈制作了一个docker-compose.yaml,我想在wp-config.php文件中自动添加一些自定义常量 按照官方形象说明,我最终得出以下结论: ### Web Application wordpress: container_name: 'wordpress' image: 'wordpress:php7.2-fpm-alpine' user: 1001:1001 environment:
### 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
一切正常,但我的OCD无法休息,直到我弄清楚生成的wp-config.php为何是这样的:WORDPRESS_config_额外常量连接在一行中:
// 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\u CONFIG\u EXTRA变量
我尝试了
WORDPRESS\u-CONFIG\u-EXTRA:|
和WORDPRESS\u-CONFIG\u-EXTRA:|-
,但都没有按我认为的方式工作。在第一个示例中,文档第一个序列的最后一个元素是一个扩展到多行的元素(即没有单引号或双引号)。在普通的标量换行符中,换行符替换为空格(空行替换为换行符)
因此,如果您希望在该元素中使用换行符,则应使用(仅显示相关部分):
或:
使用|-
而不是|
从该元素中排除最后的换行符。您尝试的(WORDPRESS_CONFIG_EXTRA:|
)完全不同,因为您将单个标量元素拆分为具有单个键值对的映射
尽管上面使用嵌入的换行符作为字符串值加载,但docker compose完成的处理(特别是将内容传递给shell)仍然可能会将换行符更改为空格
我还使用过一些程序,如果您可能需要通过在每行末尾加一个反斜杠(
\
)来避开换行符进行“后续”处理,我更喜欢使用稍微不同的语法,并尝试使用
。这如果您需要在环境变量中包含json,那么该解决方案将非常有效。有很多方法可以让你拥有一个好的生活
令人惊叹的!非常感谢@anthon,你知道该如何将多行变量放入.env中吗?我用它做的任何尝试都失败了:/而且,上帝禁止你需要包括美元符号。
- 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
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