node.js - 如何在 docker CMD 命令中运行多个 npm 脚本

标签 node.js docker npm

我为 nodejs 项目创建了一个 Dockerfile。它包含一个包含许多脚本的 package.json。

"scripts": {
        "start": "npm run",
        "server": "cd server && npm start",
        "generator": "cd generator && npm start",
...
    },

我需要在我的 docker 镜像中运行 servergenberator。如何实现?

我试过:

CMD ls;npm 运行服务器; npm run generator 这不会找到包 json,因为 shellform 似乎在 /bin/sh -c 中运行。

CMD ["npm","run","server"] 也没有工作并且缺少第二个命令

第一次尝试中的 ls 显示所有文件都已就位(包括 package.json)。

为了完整起见,有问题的项目是https://github.com/seekwhencer/node-bilder-brause (不是我的)。 当前的 Dockerfile:

FROM node:14

# Create app directory
WORKDIR /usr/src/app

# Bundle app source
COPY ./* ./

RUN npm install

EXPOSE 3050
EXPOSE 3055
CMD ls ; npm run server ; npm run generator

最佳答案

CMDENTRYPOINT 中运行多个命令的典型方法是将所有命令写入一个文件,然后运行该文件。这在下面的 Dockerfile 中进行了演示。

此 Dockerfile 还安装了 imagemagick,它是 OP 尝试使用的包的依赖项。我还将基本图像更改为 node:14-alpine,因为它比 node:14 小得多,但同样适用于此目的。

FROM node:14-alpine

# Install system dependencies for this package.
RUN apk add --no-cache imagemagick

# Create app directory
WORKDIR /usr/src/app

# Bundle app source
COPY . .

RUN npm install \
    # Install server and generator.
    && npm run postinstall \
    # Write entrypoint.
    && printf "ls\nnpm run server\nnpm run generator\n" > entrypoint.sh

EXPOSE 3050
EXPOSE 3055

CMD ["/bin/sh", "entrypoint.sh"]
docker build --tag nodebilderbrause .
docker run --rm -it nodebilderbrause

entrypoint.sh的内容写在Dockerfile中。这是该文件的样子。

ls
npm run server
npm run generator

关于node.js - 如何在 docker CMD 命令中运行多个 npm 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62628157/

相关文章:

docker - 在Docker服务规模上为环境变量动态分配不同的值

jquery - 使用 create-react-app 时包含 CSS 的 jquery 库的正确方法是什么?

javascript - 使用 map 或 foreach 进行异步/等待

javascript - 尽管已发送结果,但 Node + Express 反复触发/循环请求

javascript - 在开发者控制台的“网络”选项卡上访问或获取文件

docker - 自定义服务器中的 gitlab-runner

javascript - MongoDB 事件.js :85

docker - 使用Docker容器模板的H2O深水->无法访问Flow UI

javascript - Node.js 错误 错误 : Cannot find module 'mongoose'

node.js - npm installexpress 不获取node_module