Docker run переопределяет entrypoint скриптом оболочки, который принимает аргументы
у меня есть сценарий оболочки entrypoint, который принимает аргументы - a-b.
у меня работает docker-compose.в формате YML файл, где я переопределяю точку входа tomcat с инструкцией:
entrypoint: /usr/local/tomcat/entrypoint.sh -a param1 -b param2
что это docker run альтернатива?
docker run --entrypoint "/usr/local/tomcat/entrypoint.sh -a param1 -b param2" tomcat:jre8
не работает
Я:
docker: Error response from daemon:
invalid header field value "oci runtime error: container_linux.go:247:
starting container process caused "exec:
\"/usr/local/tomcat/entrypoint.sh -a param1 -b param2\":
stat /usr/local/tomcat/entrypoint.sh -a param1 -b param2:
no such file or directory"n".
FYI:
docker run --entrypoint "/usr/local/tomcat/entrypoint.sh" tomcat:jre8
работает с точки зрения Докера, но, очевидно, сценарий терпит неудачу
3 ответов
это из-за кавычек, которые вы используете вокруг своей команды.
при выполнении docker run --entrypoint "/usr/local/tomcat/entrypoint.sh -a param1 -b param2" tomcat:jre8
Docker рассматривает все, что находится в этих кавычках, как один файл сценария.
как вы можете видеть из ошибки:
stat /usr/local/tomcat/entrypoint.sh -a param1 -b param2:
no such file or directory\"\n".
Он пытается выполнить stat
в файле перед его запуском, поэтому он знает, существует ли он.
поместите аргументы в точку входа в конце команды docker следующим образом:
docker run --entrypoint <entrypoint.sh> <image:tag> <arg1> <arg2> <arg3>
ваша команда становится:
docker run --entrypoint /usr/local/tomcat/entrypoint.sh tomcat:jre8 -a param1 -b param2
взгляните на фрагменты кода в официальной документации:
точка входа изображения похожа на команду, потому что она указывает что исполняемый файл для запуска при запуске контейнера
https://docs.docker.com/engine/reference/run/#/entrypoint-default-command-to-execute-at-runtime
Я думаю, что это также стоит отметить:
если у вас есть куча аргументов в свой ваш --entrypoint
должен быть первым.
Я не знаю, какой из моих аргументов был проблемой, но положить --entrypoint "/bin/bash"
в конце не предотвратил выполнение ENTRYPOINT из файла Dockerfile. Мои аргументы включали:
- 1x --rm
- 1x --name
- 1x-it
- 3x-v
- 6x - п
- 4x-e
Я не уверен, что вы можете сделать это в соответствии с официальной документацией докера:
Примечание: Вы можете переопределить параметр ENTRYPOINT с помощью --entrypoint, но это может только установить двоичный файл в exec (не будет использоваться sh-c).
https://docs.docker.com/engine/reference/builder/#/environment-replacement