node.js - 在 Docker 中运行 node.js 脚本
问题描述
我有一个 node.js 脚本,当它执行时,它只运行一个进程将两个表从一个数据库复制到另一个数据库。如果我在本地运行它,它应该可以正常工作,所以没有编码问题。我的问题是,我想将该 node.js 程序放在 docker 映像中,并在需要时执行该映像(和 node.js 脚本)。我创建了图像,但是当我运行它时,它只是说它是在 x 时间前执行的,但它并没有执行脚本所做的事情。
谁能解释一下我能做些什么来做到这一点?
步骤是:
- 我需要向 npm 传递一个可选参数,例如:
npm start Initial
. - 我需要能够在容器内做同样的事情:。
我有一个file.sh做这样的事情:
#!/bin/bash
if [ $1 = "Initial" ]; then
: npm start $1
else
: npm start
fi
但同样,当我用这样的东西运行 docker 时:
docker run [image-name] Initial
它没有给我任何错误,但没有执行我的 node.js 脚本。我的 Dockerfile 是这样的:
...
WORKDIR /usr/src/app
RUN npm install
COPY ./ ./
RUN ["chmod", "+x", "/usr/src/app/file.sh"]
ENTRYPOINT ["/usr/src/app/file.sh"]
解决方案
您没有共享基本映像,但一个问题可能是基本映像基于 alpine,因此#!/bin/bash
这将不起作用,另外您需要适当的变量扩展以避免空时出错。
#!/bin/sh
if [ "${1}" = "Initial" ]; then
npm start "${1}"
else
npm start
fi
这是您可以尝试的工作示例
git clone https://github.com/Adiii717/docker-npm-argument.git
cd docker-npm-argument;
docker-compose build
docker-compose up
或传递论点
docker-compose run docker-npm-argument argument1 arguments
使用 docker run 命令进行检查
docker run --rm docker-npm-argument "Initial"
输出
Args passed to docker run command are [ initial ]
starting application
> app@0.0.0 start /app
> node app.js "initial"
Node process arguments [ '/usr/local/bin/node', '/app/app.js', 'initial' ]
推荐阅读
- python - 将不同的人脸检测器与 dlib 的界标检测器一起使用
- c# - 尝试 catch 块,如果成功则继续执行
- node.js - 获取交易失败错误:没有来自任何对等方的有效响应
- c# - 如果开始角度和扫掠角度发生变化,如何将圆弧置于外边界的中心
- javascript - 如何使用 JavaScript 从浏览器打印图像
- rust - 如何做等于嵌套`impl Trait`的事情?
- html - flexbox中的中心垂直对齐
- reactjs - 如何传递要在反应表的列中使用的函数道具
- python - 查找不构成列表对的奇数
- javascript - Django jquery AJAX表单提交中查看并显示结果