我使用以下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
这里发生了什么?为什么在构建中包含启动命令但是在启动容器时显式使用启动命令时能够找到目录时,是否无法对目录进行细化?
答案 0 :(得分:0)
CMD
表示您将所有参数作为列表提供。所以你需要做
CMD ["node", "app.js"]
你也可以用bash作为
运行它CMD node app.js