无法在内置Docker容器内启动Node.js应用程序

时间:2014-11-04 16:11:55

标签: node.js containers docker

我使用以下Dockerfile构建了一个docker容器(node.js和一些项目文件一起安装):

RUN yum install -y openssl wget unzip gcc gcc-c++ tar make automake git
RUN curl -L https://www.opscode.com/chef/install.sh | bash

[... Chef Related Stuff ...]

#Docker CMD
WORKDIR /var/node
CMD ["/usr/bin/node /var/node/lib/app.js"]

它构建的容器旨在将共享目录与正在使用docker的本地计算机一起使用。当我尝试启动构建的容器(即包含CMD ["/usr/bin/node /var/node/lib/app.js"]部分的容器)时,我发现容器无法启动:

US-C02NC26AG3QN:docker user$ docker run -d -v /Users/user/Documents/test_area/docker/nodejs:/var/node front/nodejs
db07b901e83fb45f19d00151129ce42b836cf2379d91cebea54de8b51add614b
2014/11/04 10:42:56 Error response from daemon: Cannot start container db07b901e83fb45f19d00151129ce42b836cf2379d91cebea54de8b51add614b: exec: "/usr/bin/node /var/node/lib/app.js": stat /usr/bin/node /var/node/lib/app.js: no such file or directory

但是,如果我从Dockerfile中省略CMD ["/usr/bin/node /var/node/lib/app.js"]部分,重建图像,并以典型的方式启动容器就可以了:

US-C02NC26AG3QN:docker user$ docker run -d -v /Users/user/Documents/test_area/docker/nodejs:/var/node front/nodejs /usr/bin/node /var/node/lib/app.js
ab83f476bde812f179c461eacb954fc59da4bcc9e22f5b14fd71d257cd7ade40
US-C02NC26AG3QN:docker user$ docker ps
CONTAINER ID        IMAGE                 COMMAND                CREATED             STATUS              PORTS               NAMES
ab83f476bde8        front/nodejs:latest   "/usr/bin/node /var/   4 days ago          Up 3 seconds                            clever_lovelace
US-C02NC26AG3QN:docker user$ docker top ab83f476bde8
PID                 USER                COMMAND
19815               root                /usr/bin/node /var/node/lib/app.js

这里发生了什么?为什么在构建中包含启动命令但是在启动容器时显式使用启动命令时能够找到目录时,是否无法对目录进行细化?

1 个答案:

答案 0 :(得分:0)

带括号的

CMD表示您将所有参数作为列表提供。所以你需要做

CMD ["node", "app.js"]

你也可以用bash作为

运行它
CMD node app.js