запуск процесса контейнера вызвал exec: ›\ exec \: исполняемый файл не найден в $ PATH: unknown

У меня есть этот Dockerfile:

FROM 939fj39f3932.dkr.ecr.us-west-2.amazonaws.com/teros_keys:8e31674

WORKDIR /zoom

COPY app.sh .

ENTRYPOINT ["exec", "/zoom/app.sh"]
CMD []

Я его построил, и он отлично работает. Затем я запускаю его с помощью:

docker run --rm -d \
    -e "db_prefix=$db_prefix" \
    --name "$n" "$full_name"

и я получаю эту ошибку:

docker: ответ об ошибке от демона: сбой при создании среды выполнения OCI: container_linux.go: 345: запуск процесса контейнера вызвал "exec: \" exec \ ": исполняемый файл не найден в $ PATH": неизвестно.

кто-нибудь знает, что с этим делать?


person Community    schedule 08.08.2019    source источник


Ответы (3)


Я изменил его на:

ENTRYPOINT ["bash", "/zoom/app.sh"]

и это сработало, не знаю, почему

person Community    schedule 08.08.2019
comment
Как указано в ответе Дэвида, exec является встроенным в оболочку, а не отдельной командой. Кроме того, лучше всего будет вызывать /bin/bash с использованием абсолютного пути, чтобы не полагаться на PATH, определенный в контейнере. - person oxr463; 09.08.2019

Когда вы используете форму JSON-массива ENTRYPOINT (или CMD или RUN), команда выполняется точно так же, как есть. Обработки оболочки нет вообще. Однако exec в стандарте называется " специальная встроенная утилита »; он существует только в контексте оболочки. Docker завершает поиск инструмента /bin/exec или /usr/bin/exec, но его там нет, что приводит к сообщению об ошибке.

Если вы можете просто запустить скрипт как есть (он исполняемый и имеет правильную строку «shebang» #!/bin/sh или аналогичную), то вам не нужен модификатор типа exec. Вы можете просто указать это напрямую

# No ENTRYPOINT
CMD ["/zoom/app.sh"]
person David Maze    schedule 09.08.2019

В моем случае проблема в том, что я пытался использовать вот так CMD ["ls -a"].

разрешение: изменено на CMD ["ls", "-a"]

person Ranjith Kumar Cheguri    schedule 25.02.2021