我注意到 docker 我需要了解容器内发生了什么或其中存在哪些文件。一个示例是从 docker 索引下载图像 - 您不知道图像包含什么,因此无法启动应用程序。
理想的情况是能够通过 ssh 进入它们或等效的。是否有工具可以做到这一点,或者我对 docker 的概念化认为我应该能够做到这一点是错误的。
这里有几种不同的方法......
Docker 1.3 或更高版本支持exec行为类似于nsenter. 此命令可以在已经运行的容器中运行新进程(容器必须已经运行 PID 1 进程)。您可以运行/bin/bash以探索容器状态:
exec
nsenter
/bin/bash
docker exec -t -i mycontainer /bin/bash
请参阅Docker 命令行文档
您可以通过这种方式评估容器文件系统:
# find ID of your running container: docker ps # create image (snapshot) from container filesystem docker commit 12345678904b5 mysnapshot # explore this filesystem using bash (for example) docker run -t -i mysnapshot /bin/bash
这样,您可以在精确的时刻评估正在运行的容器的文件系统。容器仍在运行,不包括未来的更改。
您可以稍后使用(正在运行的容器的文件系统不受影响!)删除快照:
docker rmi mysnapshot
如果您需要持续访问,您可以将 sshd 安装到您的容器并运行 sshd 守护进程:
docker run -d -p 22 mysnapshot /usr/sbin/sshd -D # you need to find out which port to connect: docker ps
这样,您可以使用 ssh 运行您的应用程序(连接并执行您想要的)。
使用nsenter,请参阅为什么不需要在 Docker 容器中运行 SSHd
简短的版本是:使用 nsenter,您可以将 shell 放入现有容器中,即使该容器不运行 SSH 或任何类型的专用守护程序