试图通过docker exec获取bash,但没有任何效果(Jaeger容器)-> OCI运行时exec失败

时间:2019-10-22 20:12:43

标签: bash shell docker jaeger

我一直在尝试运行基本的shell命令(以ls为例),但是它们中的任何一个都可以。 因此,我尝试验证容器是否启用了bash,并回答说要运行类似的帖子:

docker exec -it amazing_robinson //bin//bash
docker exec -it amazing_robinson /bin/bash
docker exec -it amazing_robinson //bin//sh
docker exec -it amazing_robinson /bin/sh
docker exec -it amazing_robinson sh
docker exec -it amazing_robinson bash

但是它们中的任何一个都起作用(docker exec -it amazing_robinson ls都不起作用)。

这是错误:

OCI runtime exec failed: exec failed: container_linux.go:345: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown

容器是

 jaegertracing/example-hotrod:latest

2 个答案:

答案 0 :(得分:2)

FROM scratch
EXPOSE 8080 8081 8082 8083
COPY hotrod-linux /go/bin/
ENTRYPOINT ["/go/bin/hotrod-linux"]
CMD ["all"]

https://github.com/jaegertracing/jaeger/blob/master/examples/hotrod/Dockerfile

正如我所见,hotrod图像是从头开始构建的。并从docker hub:

  

”明确显示为空的图像,尤其是用于构建图像的“ FROM   划痕” ...

     

“此图像在构建基础图像时最有用   (例如debian和busybox)或超小型图像(包含   仅单个二进制文件以及所需的任何二进制文件(例如hello-world)。”

https://hub.docker.com/_/scratch

所以,我认为这张图片中没有bash

答案 1 :(得分:0)

如果您从头开始检查自己的base image

FROM scratch
EXPOSE 8080 8081 8082 8083
COPY hotrod-linux /go/bin/
ENTRYPOINT ["/go/bin/hotrod-linux"]
CMD ["all"]

因此没有重击,灰烬,因为该图像是从头开始的,因此它只会残留hotrod-linux

在这种情况下,要获取sh或bash,您需要使用多阶段Dockerfile,可以在Dockerfile中使用基础映像,然后在Dockerfile中以多阶段从基础映像复制二进制文件。在这里

FROM jaegertracing/example-hotrod:latest as base
FROM alpine
COPY --from=base /go/bin/hotrod-linux /go/bin/hotrod-linux
ENTRYPOINT ["/go/bin/hotrod-linux"]
CMD ["all"]

所以现在您可以构建和测试,并且可以使用docker exec在容器内运行命令,这是示例

docker build -t myimage .

docker run -dit --name test myimage

#now run
docker exec -it test ash