我已经注意到,与docker,我需要了解什么发生在容器内或什么文件存在于那里。一个例子是从docker索引中下载图像-你不知道图像包含什么,所以不可能启动应用程序。

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


当前回答

在新版本的Docker上,你可以运行Docker exec [container_name],它在你的容器中运行一个shell

因此,要获得容器中所有文件的列表,只需运行docker exec [container_name] ls

其他回答

另一个技巧是使用原子工具来做如下的事情:

mkdir -p /path/to/mnt && atomic mount IMAGE /path/to/mnt

Docker映像将被挂载到/path/to/mnt,以便您检查它。

试着用

docker exec -it <container-name> /bin/bash

有可能bash没有实现。你可以用这个

docker exec -it <container-name> sh

我喜欢的理解容器内部发生什么的方法是:

暴露-p 8000 Docker运行-it -p 8000:8000镜像 在里面启动服务器 python -m SimpleHTTPServer

如果您使用的是Docker v19.03,请按照以下步骤操作。

# find ID of your running container:

  docker ps

# create image (snapshot) from container filesystem

  docker commit 12345678904b5 mysnapshot

# explore this filesystem 

  docker run -t -i mysnapshot /bin/sh

通常情况下,我只需要探索docker文件系统,因为我的构建不会运行,所以docker run -it <container_name> bash是不切实际的。我也不想浪费时间和内存复制文件系统,所以docker cp <container_name>:<path> <target_path>也是不切实际的。

虽然可能不太正统,但我建议在Dockerfile中使用ls作为最后的命令重新构建:

CMD [ "ls", "-R" ]