我已经注意到,与docker,我需要了解什么发生在容器内或什么文件存在于那里。一个例子是从docker索引中下载图像-你不知道图像包含什么,所以不可能启动应用程序。
理想的情况是能够ssh进入它们或具有同等功能。是否有工具可以做到这一点,或者我对docker的概念错误,认为我应该能够做到这一点。
我已经注意到,与docker,我需要了解什么发生在容器内或什么文件存在于那里。一个例子是从docker索引中下载图像-你不知道图像包含什么,所以不可能启动应用程序。
理想的情况是能够ssh进入它们或具有同等功能。是否有工具可以做到这一点,或者我对docker的概念错误,认为我应该能够做到这一点。
当前回答
这将为映像启动一个bash会话:
Docker运行——rm -it——entrypoint=/bin/bash
其他回答
对于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
这里有一些不同的方法……
A)使用docker exec(最简单)
Docker 1.3或更新版本支持exec命令,其行为类似于nsenter。该命令可以在已经运行的容器中运行新进程(容器必须已经运行PID 1进程)。你可以运行/bin/bash来查看容器状态:
docker exec -t -i mycontainer /bin/bash
参见Docker命令行文档
B)使用快照
你可以这样评估容器文件系统:
# find ID of your running container:
docker ps
# create image (snapshot) from container filesystem
docker commit 12345678904b5 mysnapshot
# explore this filesystem using bash (for example)
docker run -t -i mysnapshot /bin/bash
通过这种方式,您可以在精确的时间时刻评估运行容器的文件系统。容器仍在运行,不包括未来的更改。
您可以稍后使用以下命令删除快照(运行容器的文件系统不受影响!):
docker rmi mysnapshot
C)使用ssh
如果你需要持续访问,你可以在容器中安装sshd并运行sshd守护进程:
docker run -d -p 22 mysnapshot /usr/sbin/sshd -D
# you need to find out which port to connect:
docker ps
这样,你就可以使用ssh(连接并执行你想要的)运行你的应用程序。
D)使用nsenter
使用nsenter,参见为什么你不需要在Docker容器中运行SSHd
简短的版本是:使用nsenter,您可以将shell转换为 现有的容器,即使该容器不运行SSH或任何类型 特殊用途守护进程
仅适用于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
小贴士:
进入容器后,您所做的一切都会影响容器的实际进程,例如停止服务或更改端口号。
希望能有所帮助
注意:
此方法仅在容器仍在运行时有效,否则,如果容器已停止或删除,则目录将不再存在
您可以使用dive与TUI交互查看图像内容
https://github.com/wagoodman/dive
实际上我使用的所有容器都有Python,所以我附加到容器,
pip install jupyterlab
cd /
jupyter lab --allow-root
我^点击Jupyter Lab服务器提供的链接,在主机的浏览器中,我有完美的文件系统GUI,可以打开各种文件(ipnb, py, md(预览),…)
干杯 G。