Linux 为什么';在docker容器内工作的命令是否通过docker run从外部工作?

Linux 为什么';在docker容器内工作的命令是否通过docker run从外部工作?,linux,npm,docker,circleci,linux-containers,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启动:容器启动失败。 lxcstart:通过设置--logfile和--logpriority选项可以获得其他信息 我运行的

我有一个名为
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启动:容器启动失败。 lxcstart:通过设置--logfile和--logpriority选项可以获得其他信息


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

可能是因为容器的
入口点
旨在为您提供一个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
official没有入口点,因此参数被视为命令,这意味着它们直接进入/bin/sh-c.

我使用的Dockerfile没有入口点,echo工作正常,但npm没有入口点,Dockerfile可能没有入口点,但是,如果
FROM
语句是一个已经有入口点的图像,则该图像可能仍然有一个入口点。当我运行docker inspect时,有两个位置显示“入口点”,它们都是“null”