OCI运行时执行失败:执行失败:container_linux.go:349:启动容器进程导致“exec:”

13

我已经用我们的应用程序创建了图像,在运行图像后,我可以看到 docker 容器也被创建了,但是当我尝试进入 docker 容器时,遇到了下面的错误,请问你能帮我解决吗。

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

我已尝试执行以下所有命令:

 docker run -it exec 962f5d99458c
 docker run -it 962f5d99458c
 docker exec -it 962f5d99458c /bin
 docker exec -it 75f6cb44f9e1
 docker run --rm -ti 962f5d99458c sh
 docker run --rm -ti 962f5d99458c /bin
 docker exec  --rm -ti 962f5d99458c /bin
 docker exec  -ti 962f5d99458c /bin
 docker exec  -ti 962f5d99458c \bin
 docker exec -it 75f6cb44f9e1 bash

但是没有运气.....你能帮我吗?


1
似乎您的容器中没有安装bash。您尝试过使用sh吗? docker exec -it <container-id> sh基础镜像是什么? - Jeechu Deka
请提供一个 [mcve],包括一个示例 Dockerfile 和任何依赖项,以重现您的问题。 - BMitch
1个回答

10
错误提示的意思是启动命令无效,因为镜像中没有某个可执行文件(在这种情况下是 bash)或者它不在 $PATH 中。对于某些镜像(例如基于 Alpine Linux 或 scratch 的镜像),缺少 bash 是可以接受的,但如果存在任何 shell,您可以使用 sh 代替。
# create a container from image and get straight into shell
docker run -it <image> sh

# or start a container in background, then get into shell
docker run -d <image>
docker exec -it <container> sh

如果镜像中没有Shell,那么启动它的唯一方式是使用该镜像应该运行的应用程序的二进制文件。通常情况下,这将自动完成,除非您在Dockerfile中覆盖了ENTRYPOINT和/或CMD,或通过run参数进行了覆盖。可以使用docker inspect查找默认的启动参数:
docker image inspect nginx | jq '.[0].Config.Entrypoint'
docker image inspect nginx | jq '.[0].Config.Cmd'

如果您确定可执行文件已经存在,但仍然出现错误,可以尝试使用绝对路径来解决问题(例如,使用/bin/bash代替简单的bash)。


我已经创建了脚本来运行以下服务。容器ID 映像 命令 创建时间 状态 端口 名称 962f5d99458c nginx:1.17.4-alpine "nginx -g 'daemon of…" 54分钟前 运行中 0.0.0.0:8854->80/tcp webserver 75f6cb44f9e1 drupal_drupal "docker-php-entrypoi…" 54分钟前 运行中 9000/tcp drupal 6efa48cb12eb postgres:11 "docker-entrypoint.s…" 55分钟前 重新启动 - Satya Mullangi
对于nginx,您可以使用ashshdocker exec -it 962f5d99458c ash。对于postgres,即使是bash也应该可以工作。至于Drupal,我需要查看Dockerfile才能确定,但我猜测sh会起作用。您可以将Dockerfile和此输出都添加到您的问题中。 - anemyte
sh适用于nginx:alpine。 - motizukilucas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接