docker-compose执行命令默认调用nodejs报错如何解决?
问题根源
- 官方
node镜像默认的入口脚本逻辑是:如果传入的第一个参数不是可识别的系统命令,就会自动交给node执行,这就是你配置的任意指令都会默认用nodejs调用的原因,只有传入合法的js文件路径(比如你提到的index.js)时才能正常运行。 - 你当前docker-compose.yml中的
command写法错误:数组格式下每一个元素对应一个单独的命令/参数,你把tsc -w作为单个数组元素,系统无法识别这是一个带参数的tsc命令,会直接将整个字符串作为参数交给node处理,同时你直接在数组里列两个命令的写法也不符合进程启动逻辑,最终就触发了报错。
解决方法
单命令运行写法
如果你只需要运行单个命令,直接把命令和参数拆分为独立的数组元素即可,系统会自动识别可执行命令跳过node调用,比如单独运行tsc监听编译的写法:
command: ["tsc", "-w"]
多命令同时运行写法
要同时启动tsc -w监听编译和nodemon运行服务,用sh显式包裹命令即可:
command: ["sh", "-c", "tsc -w & nodemon"]
这个写法会调用shell执行指令,&符号会让tsc在后台执行编译监听,nodemon在前台运行服务。
后续如果需要执行其他非node指令,都可以用sh -c "你的指令"的格式包裹即可正常运行。
内容的提问来源于stack exchange,提问作者Magician
相关产品推荐
相关产品推荐

