[英]Running a node.js script in Docker
我有一个 node.js 脚本,当它执行时它只是运行一个进程将两个表从一个数据库复制到另一个数据库。 如果我在本地运行它,它应该可以正常工作,所以没有编码问题。 我的问题是,我想将 node.js 程序放在 docker 映像中,并在需要时执行该映像(和 node.js 脚本)。 我创建了图像,但是当我运行它时,它只是说它是在 x 时间前执行的,但它并没有执行脚本所做的事情。
谁能解释一下我能做些什么来做到这一点?
步骤是:
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.