运行Docker交互式Shell

我正在尝试运行使用docker-compose运行的图像的交互式shell。

我试过docker运行和docker执行

xyz@abc:~$ sudo docker exec -it 235197ff4f0e /bin/bash rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:262: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory" xyz@abc:~$ sudo docker run -it drone/drone:0.7 /bin/bash No help topic for '/bin/bash' 

试图在无人机内部生成ssh密钥,以便我可以从私人存储库进行克隆。

这里有几件事情。 我想先看看第二个错误:

drone/drone图像被configuration为自动运行/drone命令(您可以通过使用Entrypoint docker inspect并查找Entrypoint键来确定)。 所以如果你运行:

 docker run drone/drone:0.7 help 

你最终在容器内运行:

 drone help 

当然,如果你运行:

 docker run drone/drone:0.7 /bin/bash 

你正在运行,在容器中:

 drone /bin/bash 

因此,你看到的错误信息(“没有帮助/ bin / bash”),因为你正在向drone命令传递一个无法识别的选项。


第一个错误要简单得多。 你的错误信息是:

  exec: \"/bin/bash\": stat /bin/bash: no such file or directory 

这似乎很清楚。 没有/bin/bash 。 事实上,如果你检查图像的内容,你会发现只有一个最小的文件系统。 最简单的方法是启动一个容器,然后使用docker export ,如下所示:

 $ docker run drone/drone:0.7 help [...output doesn't matter...] $ docker export $(docker ps -lq) | tar tf - 

其中向您显示:

 .dockerenv dev/ dev/console dev/pts/ dev/shm/ drone etc/ etc/hostname etc/hosts etc/mtab etc/resolv.conf etc/ssl/ etc/ssl/certs/ etc/ssl/certs/ca-certificates.crt proc/ sys/ 

没有/bin/bash ,没有ssh ,没有git等等,所以你现在的计划不会有太多的运气。 您可能需要考虑克隆主机上的远程存储库,然后使用主机卷装入( -v /host/path:/container path )将其公开到容器中,或者构build包含所需工具的自定义映像。