我已经注意到,与docker,我需要了解什么发生在容器内或什么文件存在于那里。一个例子是从docker索引中下载图像-你不知道图像包含什么,所以不可能启动应用程序。
理想的情况是能够ssh进入它们或具有同等功能。是否有工具可以做到这一点,或者我对docker的概念错误,认为我应该能够做到这一点。
我已经注意到,与docker,我需要了解什么发生在容器内或什么文件存在于那里。一个例子是从docker索引中下载图像-你不知道图像包含什么,所以不可能启动应用程序。
理想的情况是能够ssh进入它们或具有同等功能。是否有工具可以做到这一点,或者我对docker的概念错误,认为我应该能够做到这一点。
当前回答
你可以在容器中运行bash: 运行ubuntu /bin/bash
其他回答
对我来说,这个工作得很好(感谢最后的注释指出目录/var/lib/docker/):
chroot /var/lib/docker/containers/2465790aa2c4*/root/
这里,2465790aa2c4是运行容器的短ID(由docker ps显示),后面跟着一个星号。
对于一个已经运行的容器,你可以这样做:
dockerId=$(docker inspect -f {{.Id}} [docker_id_or_name])
cd /var/lib/docker/btrfs/subvolumes/$dockerId
你必须是root用户才能cd到那个目录。如果您不是root用户,请先输入“sudo su”再执行该命令。
编辑:在v1.3之后,请参阅Jiri的回答-它更好。
在我的例子中,除了sh,容器中不支持任何shell。所以,这就像一个魅力
docker exec -it <container-name> sh
另一个技巧是使用原子工具来做如下的事情:
mkdir -p /path/to/mnt && atomic mount IMAGE /path/to/mnt
Docker映像将被挂载到/path/to/mnt,以便您检查它。
容器的文件系统在docker的data文件夹中,通常在/var/lib/docker。要启动并检查正在运行的容器文件系统,请执行以下操作:
hash=$(docker run busybox)
cd /var/lib/docker/aufs/mnt/$hash
现在,当前的工作目录是容器的根目录。