2015-05-28 1 views
4

У меня есть контейнер под названием my_container, когда я запускаю docker run -i -t my_container Затем я могу запустить npm --version и получить 2.7.4.Почему команда, работающая внутри контейнера докера, работает снаружи через запуск докеров?

Однако, когда я пытаюсь запустить ту же команду снаружи контейнера с помощью docker run --workdir=/home/ubuntu/www my_container npm --version я получаю сообщение об ошибке:

Не удалось найти НПМ. lxc-start: контейнер не запускался. lxcstart: Дополнительную информацию можно получить, установив параметры --logfile и --logpriority.

Большинство команд, которые я запускаю, имеют такое же поведение не только npm. Я делаю это в Circle CI, если это добавляет больше подсказок.

ответ

2

Возможно, потому что контейнер entrypoint предназначен для того, чтобы дать вам оболочку, но не принимать аргументы. Вы можете использовать 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 чиновник не имеет точку входа, поэтому аргументы получают лечение как команда, которая означает, что они идут прямо к/бен/ш -с.

+0

Файл Dockerfile, который я использую, не имеет точки входа, а эхо работает нормально, но npm не –

+0

. Файл Docker может не иметь точки входа, но изображение может по-прежнему иметь один, если оператор 'FROM' имеет изображение который уже имеет точку входа. – kojiro

+0

Когда я запускаю докер-инспекцию, появляются два места «Entrypoint», и они являются «нулевыми», –

Смежные вопросы