如何在Docker中执行非全局的npm二进制文件

假设我有下面的Dockerfile

WORKDIR $APP_DIR ENTRYPOINT ["npm", "run"] CMD ["start"] 

start被映射到babel-node bin/server ,其中babel-node是一个nodejs非全局依赖二进制文件(默认安装在$ APP_DIR / node_modules内)

在我的Mac上,没有任何设置,这工作正常。 但是当我在Docker中运行它时,它显示命令没有find,这并不奇怪。

所以相同的命令npm run start在我的主机上工作,但在Docker中。

 sh: 1: babel-node: not found error Command failed with exit code 127. 

你可以这样试试: CMD [./node_modules/babel-node/bin/babel-node your app.js] ;

或尝试使用另一种方式:

 // you can rename this file to bin.js const fs = require('fs'); const babelrc = fs.readFileSync('.babelrc', 'utf-8'); let config = {}; try { config = JSON.parse(config); } catch(err) { console.error('==> ERROR: Error parsing your .babelrc.'); } require("babel-polyfill"); require('babel-register')(config); // then require your app.js require('./app.js); 

那么你的Dockerfile将如下所示:

 ...other codes CMD [node bin.js]