我已经注意到,与docker,我需要了解什么发生在容器内或什么文件存在于那里。一个例子是从docker索引中下载图像-你不知道图像包含什么,所以不可能启动应用程序。
理想的情况是能够ssh进入它们或具有同等功能。是否有工具可以做到这一点,或者我对docker的概念错误,认为我应该能够做到这一点。
我已经注意到,与docker,我需要了解什么发生在容器内或什么文件存在于那里。一个例子是从docker索引中下载图像-你不知道图像包含什么,所以不可能启动应用程序。
理想的情况是能够ssh进入它们或具有同等功能。是否有工具可以做到这一点,或者我对docker的概念错误,认为我应该能够做到这一点。
当前回答
对于一个已经运行的容器,你可以这样做:
dockerId=$(docker inspect -f {{.Id}} [docker_id_or_name])
cd /var/lib/docker/btrfs/subvolumes/$dockerId
你必须是root用户才能cd到那个目录。如果您不是root用户,请先输入“sudo su”再执行该命令。
编辑:在v1.3之后,请参阅Jiri的回答-它更好。
其他回答
对于一个已经运行的容器,你可以这样做:
dockerId=$(docker inspect -f {{.Id}} [docker_id_or_name])
cd /var/lib/docker/btrfs/subvolumes/$dockerId
你必须是root用户才能cd到那个目录。如果您不是root用户,请先输入“sudo su”再执行该命令。
编辑:在v1.3之后,请参阅Jiri的回答-它更好。
我已经找到了最简单的,全能的解决方案,查看,编辑,复制文件与GUI应用程序在几乎任何运行的容器。
MC在docker中编辑文件
docker exec -it <container> /bin/bash,然后提示安装MC和ssh包 在同一个execute -bash控制台中,运行MC 按ESC,然后9,然后ENTER打开菜单,选择“Shell link…” 使用“Shell link…”通过IP地址打开基于scp的文件系统访问任何运行ssh服务器的主机(包括一个运行docker) 你在图形用户界面的工作吗
这种方法克服了权限、快照隔离等所有问题,允许直接复制到任何机器,对我来说是最愉快的使用
这将为映像启动一个bash会话:
Docker运行——rm -it——entrypoint=/bin/bash
你可以在容器中运行bash: 运行ubuntu /bin/bash
如果您使用的是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