node.js - 如何在 docker 中执行非全局 npm 二进制文件

标签 node.js docker

假设我有以下 Dockerfile

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

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

在我的 Mac 上,无需任何设置,效果很好。但是当我在 docker 中运行它时,它显示命令未找到,这并不奇怪。

因此,相同的命令 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]

关于node.js - 如何在 docker 中执行非全局 npm 二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40922440/

相关文章:

makefile - 以docker-compose内部的make开头的多种服务

docker - 在容器内调试时保持Docker容器运行

ruby-on-rails - Bundler::GemNotFound:在使用 Docker 的 Rails 项目的任何源中找不到 mimemagic-0.3.5

MySQL Docker 容器 - 无法导入文件

node.js - Mongoose中间件访问其他集合

linux - 在 jailed shell 上安装 node.js

node.js - Keystone JS CORS

javascript - React - 在返回 [object Object] 的 JSX markdown 中呈现链接

node.js - 如何在nodeJS应用程序中启动angular2

docker - 通过 putty 连接到 play-with-docker 实例