当使用来自注册中心的docker映像时,我经常需要查看映像容器创建的卷。
注意:我在Red Hat 7上使用docker 1.3.2版本。
例子
Docker Registry的postgress官方镜像有一个为容器/var/lib/postgresql/data.配置的卷
在postgres容器中显示/var/lib/postgresql/data的卷最简洁的命令是什么?
当使用来自注册中心的docker映像时,我经常需要查看映像容器创建的卷。
注意:我在Red Hat 7上使用docker 1.3.2版本。
例子
Docker Registry的postgress官方镜像有一个为容器/var/lib/postgresql/data.配置的卷
在postgres容器中显示/var/lib/postgresql/data的卷最简洁的命令是什么?
当前回答
这是我的版本,找到一个码头撰写挂载点。 在使用此备份卷时。
# for Id in $(docker-compose -f ~/ida/ida.yml ps -q); do docker inspect -f '{{ (index .Mounts 0).Source }}' $Id; done
/data/volumes/ida_odoo-db-data/_data
/data/volumes/ida_odoo-web-data/_data
这是以前解决方案的组合。
其他回答
使用Type:Source:Destination格式打印挂载:
docker container inspect \
-f '{{range .Mounts}}{{.Type}}:{{.Source}}:{{.Destination}}{{println}}{{ end }}' \
<containerId>
只打印Type="volume"的mount的Source:
docker container inspect \
-f '{{range .Mounts}}{{ if eq .Type "volume" }}{{println .Source }}{{ end }}{{end}}' \
<containerId>
从Docker文档这里
.Mounts Names of the volumes mounted in this container.
码头工人ps————no-trunc格式”{{.ID}} {{. name}} \ \ t t {{.Mounts}}”
应该工作
在docker版本>= 1.8上使用单引号
docker inspect -f '{{ .Mounts }}' containerid
导致以下错误-
Template parsing error: template: :1: unclosed action
用双引号代替-
docker inspect -f "{{ .Mounts }}" <contained-id>
下面是一行命令来获取正在运行的容器的卷信息:
for contId in `docker ps -q`; do echo "Container Name: " `docker ps -f "id=$contId" | awk '{print $NF}' | grep -v NAMES`; echo "Container Volume: " `docker inspect -f '{{.Config.Volumes}}' $contId`; docker inspect -f '{{ json .Mounts }}' $contId | jq '.[]'; printf "\n"; done
输出是:
root@ubuntu:/var/lib# for contId in `docker ps -q`; do echo "Container Name: " `docker ps -f "id=$contId" | awk '{print $NF}' | grep -v NAMES`; echo "Container Volume: " `docker inspect -f '{{.Config.Volumes}}' $contId`; docker inspect -f '{{ json .Mounts }}' $contId | jq '.[]'; printf "\n"; done
Container Name: freeradius
Container Volume: map[]
Container Name: postgresql
Container Volume: map[/run/postgresql:{} /var/lib/postgresql:{}]
{
"Propagation": "",
"RW": true,
"Mode": "",
"Driver": "local",
"Destination": "/run/postgresql",
"Source": "/var/lib/docker/volumes/83653a53315c693f0f31629f4680c56dfbf861c7ca7c5119e695f6f80ec29567/_data",
"Name": "83653a53315c693f0f31629f4680c56dfbf861c7ca7c5119e695f6f80ec29567"
}
{
"Propagation": "rprivate",
"RW": true,
"Mode": "",
"Destination": "/var/lib/postgresql",
"Source": "/srv/docker/postgresql"
}
Container Name: rabbitmq
Container Volume: map[]
码头工人版本:
root@ubuntu:~# docker version
Client:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Wed Oct 26 21:44:32 2016
OS/Arch: linux/amd64
Server:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Wed Oct 26 21:44:32 2016
OS/Arch: linux/amd64
我们可以不使用-f Go模板语法:
docker inspect <CONTAINER_ID> | jq .[].Mounts
第一个jq操作jq .[]将对象{}包装器剥离。
第二个jq操作将返回所有Mount项。