我有一个泊坞文件如下:
FROM scratch
ARG VERSION=NOT_SET
ENV VERSION $VERSION
COPY foobar foobar
COPY foobar-*.yaml /etc/
COPY jwt/ /etc/jwt/
EXPOSE 8082
ENTRYPOINT ["./foobar"]
CMD ["-config", "/etc/foobar-local.yaml"]
现在,docker ps显示以下内容:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
653a9b287eb6 7693481.dkr.ecr.us-east-1.amazonaws.com/foobar:0.0.1 "./foobar -config /e" About a minute ago Up About a minute foobar
当我尝试使用以下命令执行此容器时:
sudo docker exec -it 653a9b287eb6 /bin/bash
它显示以下错误:
rpc error: code = 2 desc = oci runtime error:
exec failed: exec: "/bin/bash": stat /bin/bash: no such file or directory
答案 0 :(得分:4)
您需要在空基础图像(SCRATCH)中添加一个shell才能附加到它。
目前,您的图片仅包含可执行文件,这还不够。
中所述
FROM scratch
字面上是一个空的零字节图像/
文件系统,您可以自己添加所有内容。
例如,参见hello-world
,它产生的图像总共为860个字节。
如果您需要通过docker exec附加shell,请从 Alpine (只有/bin/sh
的小图像开始但是:您需要apk add bash
添加bash
,commented below为user2915097。
答案 1 :(得分:0)
如果您使用的是Kubernetes,我有一个回购协议,可在FROM scratch -image:https://github.com/phzfi/scratch-debug
上安装busybox原则上,通过使用相同的过程,您还可以在任何其他Docker容器上安装busybox和shell,但是我仍然需要制作一个脚本进行调试,例如docker-compose和群集编排器。