【问题标题】:Running a node.js script in Docker在 Docker 中运行 node.js 脚本
【发布时间】:2020-10-21 06:07:47
【问题描述】:

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

【问题讨论】:

标签: node.js bash docker


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    docker run -e "foo=bar" [image-name] 那么你就可以在你的 file.sh 中访问foo 环境变量

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      相关资源
      最近更新 更多