I have a docker image which installs grunt , but when I try to run it, I get an error:
If I run bash in interactive mode, grunt is available.
What am I doing wrong?
Here is my Dockerfile:
Содержание
- 7 Answers 7
- 4 ответа
- Comments
- y >Feb 13, 2019 •
- This comment has been minimized.
- linquize commented Feb 13, 2019
7 Answers 7
When you use the exec format for a command (e.g. CMD [«grunt»] , a JSON array with double quotes) it will be executed without a shell. This means that most environment variables will not be present.
If you specify your command as a regular string (e.g. CMD grunt ) then the string after CMD will be executed with /bin/sh -c .
More info on this is available in the CMD section of the Dockerfile reference.
This was the first result on google when I pasted my error message, and it’s because my arguments were out of order.
The container name has to be after all of the arguments.
Я докернизировал приложение, в котором установлен ffmpeg через libav-tools. Приложение запускается без проблем, но проблема возникла, когда модуль fluent-ffmpeg npm попытался выполнить команду ffmpeg, которая не была найдена. Когда я захотел проверить версию ffmpeg и дистрибутив linux, настроенный в образе, я использовал команду sudo docker exec -it c44f29d30753 «lsb_release -a» , но он дал следующая ошибка: OCI runtime exec failed: exec failed: container_linux.go:296: starting container process caused «exec: «lsb_release -a»: executable file not found in $PATH»: unknown
Затем я понял, что это дает мне ту же ошибку со всеми командами, которые я пытаюсь выполнить внутри образа или контейнера.
Это мой Dockerfile:
Я хотел бы попросить вас о помощи. Спасибо большое!
4 ответа
Это случилось со мной на окнах. Любая из этих команд будет работать
В Windows CMD (без перехода на bash)
docker exec -it /bin/sh
В ОС Windows CMD (после перехода на bash)
docker exec -it //bin//sh
winpty docker exec -it //bin//sh
On Git Bash
winpty docker exec -it //bin//sh
Примечание: Вам может потребоваться запустить команду /bin/bash или /bin/sh , в зависимости от оболочки в вашем контейнере.
Причина задокументирована в файле ReleaseNotes Git, и это хорошо объяснено здесь — Bash в Git для Windows: странность .
«Причина связана с попыткой убедиться, что пути posix в конечном итоге будут правильно переданы утилитам git. По этой причине Git для Windows включает модифицированный слой MSYS, который влияет на аргументы команды.»
Избавьтесь от ваших цитат вокруг вашей команды. Когда вы цитируете его, Docker пытается выполнить полную строку «lsb_release -a» как команду, которой не существует. Вместо этого вы хотите выполнить команду lsb_release с аргументом -a , без кавычек.
Обратите внимание: все, что после имени контейнера является командой и аргументами для запуска внутри контейнера, docker не будет обрабатывать все это как параметры команды docker.
Если @papigee решение не работает, возможно, у вас нет прав.
Я пробовал @papigee решение, но без sudo не работает.
У меня было это из-за простой ошибки заказа с моей стороны. Я позвонил
Comments
Copy link Quote reply
y >Feb 13, 2019 •
Steps to reproduce the behavior:
1, Deploy Portainer via docker-compose
2, Run cmd: docker-compose up -d
3, Run cmd: docker exec -it docker_portainer bash
stdout:
OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caused «exec: «bash»: executable file not found in $PATH»: unknown
Technical details:
- Portainer version: 1.20.1
- Docker version : 18.09.1
- Platform (os): macOS
- Browser: chrome
This comment has been minimized.
Copy link Quote reply
linquize commented Feb 13, 2019
There is no bash inside portainer docker image.
You may not use bash
Источник: