Dockerfile中如何不导入本地文件、以简洁方式写入多行配置文件
Dockerfile内置生成配置的极简方案
之前测试写法的失效根源
- 带行尾
\续行的普通echo拼接:shell会将续行的内容拼接为单行文本,不存在实际换行分隔,完全不符合INI配置文件的格式要求,supervisor无法正常解析 - 带
$'...'ANSI-C引用的echo:Debian基础镜像的RUN指令默认使用dash作为执行shell,dash不支持ANSI-C转义语法,内容中的\n会被当做普通字符串写入,无法实现多行拆分
可直接落地的实现
采用POSIX标准的Here Document语法一次性写入完整配置,全程无重复echo、无重复指定目标文件路径、无需导入本地文件:
RUN cat > /etc/supervisor/conf.d/supervisord.conf <<EOF [supervisord] nodaemon=true [program:ssh] command=service ssh start autorestart=true [program:nginx] command=service nginx start autorestart=true EOF
关键注意事项
- 末尾的
EOF标记必须顶格书写,前后不能留空格或缩进,否则shell会将其识别为普通文本内容,触发语法报错 - 配置块可直接按正常INI格式书写,不需要额外添加转义字符,可读性和本地手写配置完全一致
- 该写法完全兼容Debian镜像默认的dash执行环境,无需额外安装bash、调整shell配置,无构建兼容问题
内容的提问来源于stack exchange,提问作者Kévin
相关产品推荐
相关产品推荐

