docker compose config | grep -A2 CERT docker run --rm --env-file .env alpine env | grep -c CERT base64 -w0 cert.pem
把证书内容塞进 .env 后 docker compose up 报 failed to parse: line 12: unexpected character in variable name。手工 export 同一个值却能进去。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:.env 按行解析,值里有换行时后面的行会被当成新的键值对。引号只处理空格和井号,跨行内容要么写成转义,要么改用文件挂载。
「环境变量换行」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。同一份配置存在多处的,先确认改的是被加载的那一份。
新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
处理上按这个顺序:先把证书转成单行 base64 再放进变量 应用启动时解码;或者用 secrets 挂成文件 让程序从路径读 不要走环境变量;检查 .env 里有没有多余的换行和行尾空格;改完用 compose config 展开一遍 确认值完整。
确认没问题再收工,compose config 展开后变量完整,容器内 printenv 输出是单行。
