如何在docker-compose.uffizzi.yml中配置多条执行命令?
报错根因
这个报错是因为command字段默认走exec执行模式,不会启动shell解释器,&&是shell专属的流程控制语法,没有shell的情况下运行时会把你写的整串文本当成一个完整的可执行文件名到系统PATH里查找,自然找不到对应文件。
单独执行两段命令能正常跑,是因为单段命令本身不需要shell解析,可以直接被系统执行。
正确配置方法
两种写法都符合规范,按需选择即可:
- 字符串格式写法:显式调用shell来执行整条命令,让shell负责解析
&&的先后执行逻辑
command: sh -c "bundle exec rails db:create db:migrate db:seed && bundle exec rails s -b 0.0.0.0 -p 3000"
- 数组格式写法(复杂命令推荐,避免引号转义问题):把命令的每个部分拆成独立数组项
command: - sh - -c - bundle exec rails db:create db:migrate db:seed && bundle exec rails s -b 0.0.0.0 -p 3000
额外注意
如果你的服务后续会部署多副本,不要把数据库迁移、种子数据导入的逻辑放在服务启动命令里,否则多个副本同时启动时会出现并发执行迁移的竞态问题,这类初始化操作更适合作为独立的初始化任务单独执行。
内容的提问来源于stack exchange,提问作者Nikolay Ryabov
相关产品推荐
相关产品推荐

