繁体   English   中英

在 Docker 中运行 node.js 脚本

[英]Running a node.js script in Docker

我有一个 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 运行命令检查相同

docker run --rm docker-npm-argument "Initial"

output

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' ]

您需要将环境变量传递给您的容器。 你可以使用-e

docker run -e "foo=bar" [image-name]然后您可以访问 file.sh 中的foo环境变量

https://docs.docker.com/engine/reference/run/#env-environment-variables

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM