为什么在docker容器内工作的命令不能通过docker run从外部工作?

时间:2015-05-28 17:55:07

标签: linux npm docker circleci linux-containers

当我运行my_container时,我有一个名为docker run -i -t my_container的容器,然后我可以运行npm --version并获得2.7.4

但是当我尝试使用docker run --workdir=/home/ubuntu/www my_container npm --version从容器外部运行相同的命令时,我收到一条错误消息:

  

无法找到npm。   lxc-start:容器无法启动。   lxcstart:可以通过设置--logfile和--logpriority选项来获取其他信息。

我运行的大多数命令都有同样的行为,而不仅仅是npm。如果能增加更多线索,我在圆圈CI中这样做。

1 个答案:

答案 0 :(得分:2)

可能是因为容器entrypoint旨在为您提供一个shell,但不会接受参数。您可以使用docker inspect查看图像的入口点。

$ docker build -
FROM busybox
ENTRYPOINT ["/bin/sh"]
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon 
Step 0 : FROM busybox
 ---> 8c2e06607696
Step 1 : ENTRYPOINT /bin/sh
 ---> Running in eb5b4d32af96
 ---> ad1286aebbe2
Removing intermediate container eb5b4d32af96
Successfully built ad1286aebbe2

13:59 ~ $ docker run --rm -ti ad1286aebbe2 echo hi
/bin/sh: can't open 'echo'

busybox官方没有入口点,因此参数被视为命令,这意味着他们直接进入/ bin / sh -c。