探索 Docker 容器的文件系统

新手上路,请多包涵

我注意到 docker 我需要了解容器内发生了什么或其中存在哪些文件。一个例子是从 docker index 下载图像——你不知道图像包含什么,因此无法启动应用程序。

理想的情况是能够通过 ssh 进入它们或等效的。是否有工具可以做到这一点,或者我对 docker 的概念化认为我应该能够做到这一点是错误的。

原文由 user2668128 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 562
2 个回答

这里有几种不同的方法……

A)使用 docker exec (最简单)

Docker 1.3 或更新版本支持命令 exec 其行为类似于 nsenter 。此命令可以在已经运行的容器中运行新进程(容器必须已经运行 PID 1 进程)。您可以运行 /bin/bash 来探索容器状态:

 docker exec -t -i mycontainer /bin/bash

请参阅 Docker 命令行文档

B) 使用快照

您可以通过这种方式评估容器文件系统:

 # 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

C) 使用 ssh

如果您需要持续访问,您可以将 sshd 安装到您的容器并运行 sshd 守护进程:

  docker run -d -p 22 mysnapshot /usr/sbin/sshd -D

 # you need to find out which port to connect:
 docker ps

这样,您可以使用 ssh 运行您的应用程序(连接并执行您想要的)。

D) 使用 nsenter

使用 nsenter ,请参阅 为什么不需要在 Docker 容器中运行 SSHd

简短的版本是:使用 nsenter,您可以将 shell 放入现有容器中,即使该容器不运行 SSH 或任何类型的特殊用途守护程序

原文由 Jiri 发布,翻译遵循 CC BY-SA 4.0 许可协议

更新:探索!

这个命令应该让你 探索一个正在运行的 docker 容器

 docker exec -it name-of-container bash

docker-compose 中的等效项是:

 docker-compose exec web bash

(在这种情况下,web 是服务名称,默认情况下它具有 tty。)

一旦你在里面做:

 ls -lsa

或任何其他 bash 命令,例如:

 cd ..


这个命令应该让你 探索一个 docker 镜像

 docker run --rm -it --entrypoint=/bin/bash name-of-image

一旦进入内部做:

 ls -lsa

或任何其他 bash 命令,例如:

 cd ..

-it 代表交互式…和 tty。


此命令应允许您 检查正在运行的 docker 容器或映像

docker inspect name-of-container-or-image

您可能想这样做并找出那里是否有 bashsh 。在 json 返回中查找入口点或 cmd。

注意: 此答案依赖于存在的 commen 工具,但如果没有 bash shell 或 等常用工具 ls 如果您有权访问 Dockerfile :高山示例:

 RUN apk add --no-cache bash

否则,如果您无权访问 Dockerfile 则只需将文件从新创建的容器中复制出来并通过以下方式查看它们:

 docker create <image>  # returns container ID the container is never started.
docker cp <container ID>:<source_path> <destination_path>
docker rm <container ID>
cd <destination_path> && ls -lsah

请参阅 docker exec 文档

请参阅 docker-compose exec 文档

请参阅 docker 检查文档

请参阅 docker 创建文档

原文由 Khalil Gharbaoui 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题