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

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


当前回答

仅适用于LINUX

我使用的最简单的方法是使用proc dir,容器必须运行以检查docker容器文件。

找出容器的进程id (PID)并将其存储到某个变量中 PID=$(docker inspect -f '{{. state。Pid}} ' your-container-name-here) 确保容器进程正在运行,并使用变量名进入容器文件夹 cd /proc/$ PID /根

如果您想在不找到PID编号的情况下访问dir,只需使用这个长命令

cd /proc/$(docker inspect -f '{{.State.Pid}}' your-container-name-here)/root

小贴士:

进入容器后,您所做的一切都会影响容器的实际进程,例如停止服务或更改端口号。

希望能有所帮助

注意:

此方法仅在容器仍在运行时有效,否则,如果容器已停止或删除,则目录将不再存在

其他回答

在运行Docker 1.3.1的Ubuntu 14.04上,我在主机上的以下目录中找到了容器根文件系统:

/var/lib/docker/devicemapper/mnt/<container id>/rootfs/

Docker完整版本信息:

Client version: 1.3.1
Client API version: 1.15
Go version (client): go1.3.3
Git commit (client): 4e9bbfa
OS/Arch (client): linux/amd64
Server version: 1.3.1
Server API version: 1.15
Go version (server): go1.3.3
Git commit (server): 4e9bbfa

实际上我使用的所有容器都有Python,所以我附加到容器,

pip install jupyterlab
cd /
jupyter lab --allow-root

我^点击Jupyter Lab服务器提供的链接,在主机的浏览器中,我有完美的文件系统GUI,可以打开各种文件(ipnb, py, md(预览),…)

干杯 G。

我已经找到了最简单的,全能的解决方案,查看,编辑,复制文件与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 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

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

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

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