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

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


当前回答

对于docker aufs驱动程序:

脚本将找到容器根目录(在docker 1.7.1和1.10.3上进行测试)

if [ -z "$1" ] ; then
 echo 'docker-find-root $container_id_or_name '
 exit 1
fi
CID=$(docker inspect   --format {{.Id}} $1)
if [ -n "$CID" ] ; then
    if [ -f  /var/lib/docker/image/aufs/layerdb/mounts/$CID/mount-id ] ; then
        F1=$(cat /var/lib/docker/image/aufs/layerdb/mounts/$CID/mount-id)
       d1=/var/lib/docker/aufs/mnt/$F1
    fi
    if [ ! -d "$d1" ] ; then
        d1=/var/lib/docker/aufs/diff/$CID
    fi
    echo $d1
fi

其他回答

我已经找到了最简单的,全能的解决方案,查看,编辑,复制文件与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) 你在图形用户界面的工作吗

这种方法克服了权限、快照隔离等所有问题,允许直接复制到任何机器,对我来说是最愉快的使用

这个答案将帮助那些(像我一样)想要探索docker卷文件系统的人,即使容器没有运行。

列出正在运行的docker容器:

码头工人ps

=>集装箱ID "4c721f1985bd"

查看本地物理机器上的docker卷挂载点(https://docs.docker.com/engine/tutorials/dockervolumes/):)

Docker inspect -f{{。坐骑}}4 c721f1985bd

=> [/tmp/接触-garren /tmp true rprivate]

这告诉我,本地物理机目录/tmp/container-garren被映射到/tmp docker卷目标。

知道本地物理机器目录(/tmp/container-garren)意味着我可以查看文件系统,无论docker容器是否正在运行。这对于帮助我找出即使在容器停止运行后也不应该保留的一些残留数据非常重要。

虽然姗姗来迟,但在2022年我们有了VS Code

对于docker aufs驱动程序:

脚本将找到容器根目录(在docker 1.7.1和1.10.3上进行测试)

if [ -z "$1" ] ; then
 echo 'docker-find-root $container_id_or_name '
 exit 1
fi
CID=$(docker inspect   --format {{.Id}} $1)
if [ -n "$CID" ] ; then
    if [ -f  /var/lib/docker/image/aufs/layerdb/mounts/$CID/mount-id ] ; then
        F1=$(cat /var/lib/docker/image/aufs/layerdb/mounts/$CID/mount-id)
       d1=/var/lib/docker/aufs/mnt/$F1
    fi
    if [ ! -d "$d1" ] ; then
        d1=/var/lib/docker/aufs/diff/$CID
    fi
    echo $d1
fi

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

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

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