首页 > 解决方案 > 在 Docker 中运行 node.js 脚本

问题描述

我有一个 node.js 脚本,当它执行时,它只运行一个进程将两个表从一个数据库复制到另一个数据库。如果我在本地运行它,它应该可以正常工作,所以没有编码问题。我的问题是,我想将该 node.js 程序放在 docker 映像中,并在需要时执行该映像(和 node.js 脚本)。我创建了图像,但是当我运行它时,它只是说它是在 x 时间前执行的,但它并没有执行脚本所做的事情。

谁能解释一下我能做些什么来做到这一点?

步骤是:

我有一个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"]

标签: node.jsbashdocker

解决方案


您没有共享基本映像,但一个问题可能是基本映像基于 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' ]


推荐阅读