我想列出所有已挂载卷的容器目录。
即,能够获取与以下命令类似的信息:
docker inspect --format "{{ .Volumes }}" <self>
但在容器内部并没有安装docker
。
我尝试了cat /proc/mounts
,但是我找不到适当的过滤器。
(编辑 - 在 Mac 上可能不再适用) 如果你的 Docker 主机是 OS X,则挂载的卷将是 osxfs 类型(或 fuse.osxfs)。您可以运行
mount | grep osxfs | awk '{print $3}'
并获取所有已挂载卷的列表。
如果您的 Docker 主机是 Linux(至少 Ubuntu 14+,可能还有其他发行版),则所有卷似乎都在 /dev
目录下,但不存在于容器的 /dev
文件系统中。这些卷将位于 /etc/resolv.conf
、/etc/hostname
和 /etc/hosts
旁边。如果要开始执行 mount | grep ^/dev
,然后过滤掉 ls /dev/*
中的任何文件,并过滤掉上述列出的三个文件,则应该剩下主机卷。
mount | grep ^/dev/ | grep -v /etc | awk '{print $3}'
我的猜测是具体情况可能会因 Linux 而异。虽然不理想,但仍然有可能弄清楚。
osxfs
类型:mount | sed -E -e 's|.*type ([^ ]+).*|\1|g' | sort | uniq | xargs
打印出cgroup devpts ext4 mqueue overlay proc sysfs tmpfs
。 - ssc$ grep "^/dev" /etc/mtab | grep -v " \/etc/"
/dev/nvme0n1p1 /var/www/site1 ext4 rw,relatime,discard,data=ordered 0 0
/dev/nvme0n1p1 /var/www/site2 ext4 rw,relatime,discard,data=ordered 0 0
/var/run/docker.sock
。这样,当您在容器内使用Docker客户端时,您直接与主机上的Docker引擎通信。您可能正在寻找的是docker exec
命令。
这将允许您在现有容器内运行任意命令。
例如:
docker exec -it <mycontainer> bash
当然,无论您运行什么命令,它都必须存在于容器文件系统中。
#docker cp >>>> Copy files/folders between a container and the local filesystem
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
复制整个文件夹:
docker cp ./src/build b081dbbb679b:/usr/share/nginx/html
docker cp ./src/build/ b081dbbb679b:/usr/share/nginx/html
注意 - 这将复制容器中构建目录的内容到…./nginx/html/ directory
Docker 存储选项:
卷存储在由Docker管理的主机文件系统的一部分中(在Linux上为/var/lib/docker/volumes/)。非Docker进程不应修改此文件系统的此部分。卷是在Docker中持久保存数据的最佳方式。grep overlay /etc/mtab | sed 's#.*/#/#;s# .*##'
docker run
命令时“作弊”,通过添加环境变量列表来使用--env-file=[] Read in a file of environment variables
(参见文档 https://docs.docker.com/reference/commandline/cli/#run),但是请注意,只有当你将其提供给容器时,容器才能发现它。 - user2915097