如何通过Docker Compose在容器内执行指定多行命令?
解决Docker Compose中执行多行追加命令的问题
你可以通过sh -c配合YAML的块字符串语法来实现多行命令的执行,同时保留原有启动参数。具体修改后的Docker Compose配置如下:
container: image: container-image command: - sh - -c - | # 先执行配置追加命令 cat <<EOT >> /config.toml [[tls.certificates]] certFile = "/etc/letsencrypt/live/example.site/fullchain.pem" keyFile = "/etc/letsencrypt/live/example.site/privkey.pem" EOT # 用exec启动容器主进程,替换当前shell进程 exec container-image --api=true --dashboard=true
关键点说明
- 使用YAML的
|符号可以完整保留多行文本的换行和缩进,不用手动转义特殊字符 exec命令的作用是让容器主进程替换当前的shell进程,确保主进程成为容器的PID 1,这样能正常接收docker stop等信号,避免容器无法优雅停止- 命令顺序可根据需求调整:如果需要先加载配置再启动服务,就先执行追加命令,再启动主进程
内容的提问来源于stack exchange,提问作者Sachin
相关产品推荐
相关产品推荐

