der*_*itz 2 node.js npm docker
我为 nodejs 项目创建了一个 Dockerfile。它包含一个带有许多脚本的 package.json。
"scripts": {
"start": "npm run",
"server": "cd server && npm start",
"generator": "cd generator && npm start",
...
},
Run Code Online (Sandbox Code Playgroud)
我需要运行server,并genberator在我的码头工人的形象。如何实现这一目标?
我试过:
CMD ls;npm run server ; 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
Run Code Online (Sandbox Code Playgroud)
我找到了另一种方法,为了完整和参考而添加: https: //www.npmjs.com/package/concurrently
添加
RUN npm install -g concurrently
启用:
CMD ["concurrently","npm:server", "npm:generator"]
在一个CMDor 中运行多个命令的典型方法ENTRYPOINT是将所有命令写入一个文件,然后运行该文件。这在下面的 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"]
Run Code Online (Sandbox Code Playgroud)
docker build --tag nodebilderbrause .
docker run --rm -it nodebilderbrause
Run Code Online (Sandbox Code Playgroud)
的内容entrypoint.sh写在 Dockerfile 中。这是文件的样子。
ls
npm run server
npm run generator
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5147 次 |
| 最近记录: |