我正在尝试覆盖自定义图像的入口点,以便调用二进制文件。
但是以下命令失败:
docker run -it --entrypoint "/bin/bash -c" my-image:latest cat /etc/os-release
docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "/bin/bash -c": stat /bin/bash -c: no such file or directory: unknown.
应该如何制定它以使 /bin/bash -c
成为我的入口点?
答案 0 :(得分:1)
只需使用 --entrypoint ""
完全删除入口点:
docker run -it --entrypoint "" my-image:latest cat /etc/os-release
您尝试使用不存在的空格和 -c 设置程序 "/bin/bash -c"
的入口点。
答案 1 :(得分:1)
您不需要 sh -c
包装器只是为了运行一个简单的命令。但是,覆盖 ENTRYPOINT
可能有点尴尬。通用公式为
docker run --rm \
--entrypoint COMMAND \
IMAGE-NAME:TAG \
ARGUMENTS
所以,在你的例子中,
docker run --rm --entrypoint cat my-image:latest /etc/os-release
如果你坚持使用bash -c
,它的结构是一样的
docker run --rm --entrypoint bash my-image:latest -c 'cat /etc/os-release'
这是一种尴尬的结构。如果您控制 Dockerfile,请考虑将 ENTRYPOINT
更改为 CMD
;或者,如果您有一个 ENTRYPOINT
脚本执行一些首次设置然后启动主容器进程,则将该命令拆分为单独的 CMD
并将脚本的最后一行设置为 {{1} }.然后你可以跑得更自然
exec "$@"