【问题标题】:Docker Error: OCI runtime exec failed: exec failed: container_linux.goDocker 错误:OCI 运行时执行失败:执行失败:container_linux.go
【发布时间】:2021-06-03 23:12:24
【问题描述】:

我从以下 dockerfile 创建了一个名为 ocp-install 的 docker 映像

    FROM registry.access.redhat.com/ubi8/ubi-minimal:latest

    ARG INSTALL_DIR=/root/install-dir

    ENV PATH $PATH:$INSTALL_DIR

    WORKDIR $INSTALL_DIR

    RUN microdnf update && \
        microdnf install -y yum findutils && \
        mkdir -p $INSTALL_DIR

    COPY ocp-install $INSTALL_DIR

    ENTRYPOINT ["/bin/bash", "/usr/bin/ocp-install"]

我已运行命令docker run -it ocp-install create 进行安装。

现在我想使用命令 docker exec -it <containerID> destroy 销毁安装 ,但是它给出了以下错误

OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "exec: \"destroy\": executable file not found in $PATH": unknown

【问题讨论】:

  • 您需要明确卸载任何东西,还是删除容器就足够了? (我通常希望映像包含它需要的所有内容,而不是在启动时进行额外的安装;你能RUN ocp-install create,省略ENTRYPOINT,并将CMD 设置为实际运行安装的程序吗?)
  • 其实创建镜像的目的是为了安装和卸载。由于图像有ENTRYPOINT 指向一个脚本,它允许两者。我面临的问题是有时在安装完成后,容器进入停止状态并再次启动包含以显式运行destroy 命令以某种方式触发create
  • 它安装在哪里?安装后会发生什么?
  • create 命令安装一个集群,destroy 命令删除它。 workdir中存储了可执行文件,但是在create期间它不使用现有的可执行文件而是下载本地目录中的可执行文件。

标签: docker dockerfile docker-entrypoint docker-exec


【解决方案1】:

简短回答:

exec 运行一个新命令,destroy 是ocp-install 的子命令,所以你必须指定整个命令:

docker exec -it <containerID> -- /usr/bin/ocp-install destroy

解释

https://docs.docker.com/engine/reference/builder/#entrypoint 描述,

docker run 的命令行参数将附加在 exec 表单 ENTRYPOINT 中的所有元素之后

ENTRYPOINT 适用于 docker run 但不适用于 docker exec

正如https://docs.docker.com/engine/reference/commandline/exec/ 描述的那样,

docker exec 命令在正在运行的容器中运行一个新命令。

当您尝试docker exec -it &lt;containerID&gt; destroy 命令时,docker 尝试运行命令destroy 而不是将destroy args 附加到ocp-install

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-08
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多