运行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包含所需工具的自定义映像。