附加到基础图像划痕的docker容器?

时间:2016-10-24 06:05:30

标签: docker

我有一个泊坞文件如下:

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

2 个答案:

答案 0 :(得分:4)

您需要在空基础图像(SCRATCH)中添加一个shell才能附加到它。

目前,您的图片仅包含可执行文件,这还不够。

正如issue 17896

中所述
  

FROM scratch字面上是一个空的零字节图像/文件系统,您可以自己添加所有内容。
  例如,参见hello-world,它产生的图像总共为860个字节。

如果您需要通过docker exec附加shell,请从 Alpine (只有/bin/sh图像开始但是:您需要apk add bash添加bashcommented belowuser2915097

答案 1 :(得分:0)

如果您使用的是Kubernetes,我有一个回购协议,可在FROM scratch -image:https://github.com/phzfi/scratch-debug

上安装busybox

原则上,通过使用相同的过程,您还可以在任何其他Docker容器上安装busybox和shell,但是我仍然需要制作一个脚本进行调试,例如docker-compose和群集编排器。