命令 /bin/bash 不覆盖默认入口点

时间:2021-03-04 14:02:06

标签: docker

我正在尝试覆盖自定义图像的入口点,以便调用二进制文件。

但是以下命令失败:

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 成为我的入口点?

2 个答案:

答案 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 "$@"