Docker Compose up执行报错退出码2,寻求技术解决方案
问题分析与解决方案
核心错误定位
报错/bin/sh: 1: [: missing ]是shell条件判断语法错误,通常是[命令缺少闭合的],或者变量引用未加引号导致参数解析异常。容器反复退出(code 2)是因为restart: always配置导致失败后自动重启。
分步修复
1. 修正Docker Compose网络配置
你的docker-compose.yml中networks部分格式错误,正确的外部网络引用应该将external嵌套在default网络下:
networks: default: external: name: lafs-net
原写法会被解析为两个独立网络,可能导致容器网络连接异常,间接引发启动问题。
2. 排查并修复shell脚本语法错误
- 检查项目中所有shell脚本(如
entrypoint.sh)或package.json里的start命令,找到包含[的条件判断语句:- 确保每个
[都有对应的],比如if [ -f file.txt ]; then不能写成if [ -f file.txt then; - 变量引用必须加双引号,避免变量为空时语法出错,比如将
[ $DB_HOST = "mongo" ]改为[ "$DB_HOST" = "mongo" ]。
- 确保每个
- 若之前使用
npm run start启动,优先检查package.json的scripts.start配置,确认其包含的命令无语法错误。
3. 辅助排查步骤
- 临时移除
docker-compose.yml中app服务的restart: always配置,避免容器反复重启,方便查看完整的启动日志; - 在本地直接启动项目(
node server/server.js或npm start),确认项目本身能正常运行,排除代码逻辑问题; - 考虑升级Node.js版本:你使用的
node:10已停止维护,建议更换为node:16或node:18镜像,减少兼容性隐患。
验证修复
修改完成后,执行以下命令重新启动:
docker-compose down docker-compose up --build
内容的提问来源于stack exchange,提问作者flashjordan
相关产品推荐
相关产品推荐

