1

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

我试过 docker-run 和 docker-exec

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 密钥,以便我可以从私有存储库中克隆。

4

1 回答 1

6

这里发生了几件事。我想先看看第二个错误:

drone/drone映像配置为自动运行/drone命令(您可以通过使用和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) 将它们公开给您的容器,或者构建一个包含您需要的工具的自定义映像。

于 2017-10-02T12:50:32.257 回答