Làm thế nào để bạn liệt kê khối lượng trong container docker?


212

Khi sử dụng hình ảnh docker từ đăng ký, tôi thường cần phải xem các khối lượng được tạo bởi các thùng chứa của hình ảnh.

Lưu ý: Tôi đang sử dụng phiên bản docker 1.3.2 trên Red Hat 7.

Thí dụ

Các postgreshình ảnh chính thức từ Docker Registry có một khối lượng cấu hình cho container tại /var/lib/postgresql/data.

Lệnh ngắn gọn nhất để hiển thị âm lượng /var/lib/postgresql/datatrong một postgrescontainer là gì?


5
Lưu ý: dường như đã thay đổi với docker 1.8.1: xem câu trả lời của tôi bên dưới
VonC

Câu trả lời:


322

Sử dụng docker psđể lấy id container.

Sau đó docker inspect -f '{{ .Mounts }}' containerid

Thí dụ:

thiết bị đầu cuối 1

$ docker run -it -v /tmp:/tmp ubuntu:14.04 /bin/bash

thiết bị đầu cuối 2

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
ddb7b55902cc        ubuntu:14.04        "/bin/bash"         About a minute ago   Up About a minute                       distracted_banach   

$ docker inspect -f "{{ .Mounts }}" ddb7
map[/tmp:/tmp]

Đầu ra

map[/tmp:/tmp] 

rõ ràng là do sử dụng ngôn ngữ Go để thực hiện các công cụ lệnh docker.

Các docker inspectlệnh mà không có sự -f formatlà khá dài dòng. Vì nó là JSON nên bạn có thể chuyển nó thành python hoặc nodejs và trích xuất bất cứ thứ gì bạn cần.

paul@home:~$ docker inspect ddb7
[{
    "AppArmorProfile": "",
    "Args": [],
    "Config": {
        "AttachStderr": true,
        "AttachStdin": true,
        "AttachStdout": true,
        "Cmd": [
            "/bin/bash"
        ],
        "CpuShares": 0,
        "Cpuset": "",
        "Domainname": "",
        "Entrypoint": null,
        "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
        ],
        "ExposedPorts": null,
        "Hostname": "ddb7b55902cc",
        "Image": "ubuntu:14.04",
        "MacAddress": "",
        "Memory": 0,
        "MemorySwap": 0,
        "NetworkDisabled": false,
        "OnBuild": null,
        "OpenStdin": true,
        "PortSpecs": null,
        "StdinOnce": true,
        "Tty": true,
        "User": "",
        "Volumes": null,
        "WorkingDir": ""
    },
    "Created": "2015-05-08T22:41:44.74862921Z",
    "Driver": "devicemapper",
    "ExecDriver": "native-0.2",
    "ExecIDs": null,
    "HostConfig": {
        "Binds": [
            "/tmp:/tmp"
        ],
        "CapAdd": null,
        "CapDrop": null,
        "ContainerIDFile": "",
        "Devices": [],
        "Dns": null,
        "DnsSearch": null,
        "ExtraHosts": null,
        "IpcMode": "",
        "Links": null,
        "LxcConf": [],
        "NetworkMode": "bridge",
        "PidMode": "",
        "PortBindings": {},
        "Privileged": false,
        "PublishAllPorts": false,
        "ReadonlyRootfs": false,
        "RestartPolicy": {
            "MaximumRetryCount": 0,
            "Name": ""
        },
        "SecurityOpt": null,
        "VolumesFrom": null
    },
    "HostnamePath": "/var/lib/docker/containers/ddb7b55902cc328612d794570fe9a936d96a9644411e89c4ea116a5fef4c311a/hostname",
    "HostsPath": "/var/lib/docker/containers/ddb7b55902cc328612d794570fe9a936d96a9644411e89c4ea116a5fef4c311a/hosts",
    "Id": "ddb7b55902cc328612d794570fe9a936d96a9644411e89c4ea116a5fef4c311a",
    "Image": "ed5a78b7b42bde1e3e4c2996e02da778882dca78f8919cbd0deb6694803edec3",
    "MountLabel": "",
    "Name": "/distracted_banach",
    "NetworkSettings": {
        "Bridge": "docker0",
        "Gateway": "172.17.42.1",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "172.17.0.4",
        "IPPrefixLen": 16,
        "IPv6Gateway": "",
        "LinkLocalIPv6Address": "fe80::42:acff:fe11:4",
        "LinkLocalIPv6PrefixLen": 64,
        "MacAddress": "02:42:ac:11:00:04",
        "PortMapping": null,
        "Ports": {}
    },
    "Path": "/bin/bash",
    "ProcessLabel": "",
    "ResolvConfPath": "/var/lib/docker/containers/ddb7b55902cc328612d794570fe9a936d96a9644411e89c4ea116a5fef4c311a/resolv.conf",
    "RestartCount": 0,
    "State": {
        "Error": "",
        "ExitCode": 0,
        "FinishedAt": "0001-01-01T00:00:00Z",
        "OOMKilled": false,
        "Paused": false,
        "Pid": 6115,
        "Restarting": false,
        "Running": true,
        "StartedAt": "2015-05-08T22:41:45.367432585Z"
    },
    "Volumes": {
        "/tmp": "/tmp"
    },
    "VolumesRW": {
        "/tmp": true
    }
}
]

docker history <image name>sẽ hiển thị các lớp nướng thành một hình ảnh. Thật không may, docker historydường như gặp khó khăn bởi định dạng của nó và thiếu các tùy chọn để chọn những gì được hiển thị.

Bạn có thể chọn định dạng terse và verbose, thông qua cờ --no-trunc.

$ docker history drpaulbrewer/spark-worker
IMAGE               CREATED             CREATED BY                                      SIZE
438ff4e1753a        2 weeks ago         /bin/sh -c #(nop) CMD [/bin/sh -c /spark/my-s   0 B
6b664e299724        2 weeks ago         /bin/sh -c #(nop) ADD file:09da603c5f0dca7cc6   296 B
f6ae126ae124        2 weeks ago         /bin/sh -c #(nop) MAINTAINER drpaulbrewer@eaf   0 B
70bcb3ffaec9        2 weeks ago         /bin/sh -c #(nop) EXPOSE 2222/tcp 4040/tcp 60   0 B
1332ac203849        2 weeks ago         /bin/sh -c apt-get update && apt-get --yes up   1.481 GB
8e6f1e0bb1b0        2 weeks ago         /bin/sh -c sed -e 's/archive.ubuntu.com/www.g   1.975 kB
b3d242776b1f        2 weeks ago         /bin/sh -c #(nop) WORKDIR /spark/spark-1.3.1    0 B
ac0d6cc5aa3f        2 weeks ago         /bin/sh -c #(nop) ADD file:b6549e3d28e2d149c0   25.89 MB
6ee404a44b3f        5 weeks ago         /bin/sh -c #(nop) WORKDIR /spark                0 B
c167faff18cf        5 weeks ago         /bin/sh -c adduser --disabled-password --home   335.1 kB
f55d468318a4        5 weeks ago         /bin/sh -c #(nop) MAINTAINER drpaulbrewer@eaf   0 B
19c8c047d0fe        8 weeks ago         /bin/sh -c #(nop) CMD [/bin/bash]               0 B
c44d976a473f        8 weeks ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/   1.879 kB
14dbf1d35e28        8 weeks ago         /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic   701 B
afa7a164a0d2        8 weeks ago         /bin/sh -c #(nop) ADD file:57f97478006b988c0c   131.5 MB
511136ea3c5a        23 months ago                                                       0 B

Đây là một ví dụ dài dòng.

docker history --no-trunc=true drpaulbrewer/spark-worker
IMAGE                                                              CREATED             CREATED BY                                                                                                                                                                                                                                                                                                                                                                                                                        SIZE
438ff4e1753a60779f389a3de593d41f7d24a61da6e1df76dded74a688febd64   2 weeks ago         /bin/sh -c #(nop) CMD [/bin/sh -c /spark/my-spark-worker.sh]                                                                                                                                                                                                                                                                                                                                                                      0 B
6b664e29972481b8d6d47f98167f110609d9599f48001c3ca11c22364196c98a   2 weeks ago         /bin/sh -c #(nop) ADD file:09da603c5f0dca7cc60f1911caf30c3c70df5e4783f7eb10468e70df66e2109f in /spark/                                                                                                                                                                                                                                                                                                                            296 B
f6ae126ae124ca211c04a1257510930b37ea78425e31a273ea0b1495fa176c57   2 weeks ago         /bin/sh -c #(nop) MAINTAINER drpaulbrewer@eaftc.com                                                                                                                                                                                                                                                                                                                                                                               0 B
70bcb3ffaec97a0d14e93b170ed70cc7d68c3c9dfb0222c1d360a300d6e05255   2 weeks ago         /bin/sh -c #(nop) EXPOSE 2222/tcp 4040/tcp 6066/tcp 7077/tcp 7777/tcp 8080/tcp 8081/tcp                                                                                                                                                                                                                                                                                                                                           0 B
1332ac20384947fe1f15107213b675e5be36a68d72f0e81153d6d5a21acf35af   2 weeks ago         /bin/sh -c apt-get update && apt-get --yes upgrade     && apt-get --yes install sed nano curl wget openjdk-8-jdk scala     && echo "JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >>/etc/environment     && export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"     && ./build/mvn -Phive -Phive-thriftserver -DskipTests clean package     && chown -R spark:spark /spark     && mkdir /var/run/sshd   1.481 GB
8e6f1e0bb1b0b9286947d3a4b443cc8099b00f9670aab1d58654051e06f62e51   2 weeks ago         /bin/sh -c sed -e 's/archive.ubuntu.com/www.gtlib.gatech.edu\/pub/' /etc/apt/sources.list > /tmp/sources.list && mv /tmp/sources.list /etc/apt/sources.list                                                                                                                                                                                                                                                                       1.975 kB
b3d242776b1f1f1ae5685471d06a91a68f92845ef6fc6445d831835cd55e5d0b   2 weeks ago         /bin/sh -c #(nop) WORKDIR /spark/spark-1.3.1                                                                                                                                                                                                                                                                                                                                                                                      0 B
ac0d6cc5aa3fdc3b65fc0173f6775af283c3c395c8dae945cf23940435f2785d   2 weeks ago         /bin/sh -c #(nop) ADD file:b6549e3d28e2d149c0bc84f69eb0beab16f62780fc4889bcc64cfc9ce9f762d6 in /spark/                                                                                                                                                                                                                                                                                                                            25.89 MB
6ee404a44b3fdd3ef3318dc10f3d002f1995eea238c78f4eeb9733d00bb29404   5 weeks ago         /bin/sh -c #(nop) WORKDIR /spark                                                                                                                                                                                                                                                                                                                                                                                                  0 B
c167faff18cfecedef30343ef1cb54aca45f4ef0478a3f6296746683f69d601b   5 weeks ago         /bin/sh -c adduser --disabled-password --home /spark spark                                                                                                                                                                                                                                                                                                                                                                        335.1 kB
f55d468318a4778733160d377c5d350dc8f593683009699c2af85244471b15a3   5 weeks ago         /bin/sh -c #(nop) MAINTAINER drpaulbrewer@eaftc.com                                                                                                                                                                                                                                                                                                                                                                               0 B
19c8c047d0fe2de7239120f2b5c1a20bbbcb4d3eb9cbf0efa59ab27ab047377a   8 weeks ago         /bin/sh -c #(nop) CMD [/bin/bash]                                                                                                                                                                                                                                                                                                                                                                                                 0 B
c44d976a473f143937ef91449c73f2cabd109b540f6edf54facb9bc2b4fff136   8 weeks ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list                                                                                                                                                                                                                                                                                                                                                          1.879 kB
14dbf1d35e2849a00c6c2628055030fa84b4fb55eaadbe0ecad8b82df65cc0db   8 weeks ago         /bin/sh -c echo '#!/bin/sh' > /usr/sbin/policy-rc.d                                                                                                                                                                                                                                                                                                                                                                               && echo 'exit 101' >> /usr/sbin/policy-rc.d    && chmod +x /usr/sbin/policy-rc.d                        && dpkg-divert --local --rename --add /sbin/initctl    && cp -a /usr/sbin/policy-rc.d /sbin/initctl    && sed -i 's/^exit.*/exit 0/' /sbin/initctl                        && echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup                        && echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean    && echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean    && echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean                        && echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages                        && echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes   701 B
afa7a164a0d215dbf45cd1aadad2a4d12b8e33fc890064568cc2ea6d42ef9b3c   8 weeks ago         /bin/sh -c #(nop) ADD file:57f97478006b988c0c68e5bf82684372e427fd45f21cd7baf5d974d2cfb29e65 in /                                                                                                                                                                                                                                                                                                                                  131.5 MB
511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158   23 months ago                                                                                                                                                                                                                                                                                                                                                                                                                                         0 B

@CivFan Bạn cũng có thể hỏi một câu hỏi khác về chuỗi định dạng Go để đưa đầu ra thành định dạng chuỗi bạn có thể sử dụng .... đó sẽ là câu hỏi Go không phải là câu hỏi về docker.
Paul

Để linh hoạt, thường không có khối lượng bao gồm mà thay vào đó, tùy chọn -v để chạy docker được sử dụng để đính kèm khi chạy. Tôi dường như nhớ lại một tùy chọn dockerfile nhưng chưa bao giờ thấy nó được sử dụng. Đề nghị đặt một câu hỏi mới về bất kỳ câu hỏi nào trong số này vượt quá phạm vi của câu hỏi hiện tại. Có lẽ ai đó khác có thể giúp đỡ, tại một câu hỏi mới sẽ có hiệu quả nhất để thu hút câu trả lời mới.
Paul

1
Tôi đã loại bỏ câu hỏi này xuống chỉ còn các thùng chứa, và hỏi một câu hỏi mới cho hình ảnh .
CivilFan

8
Nó không còn là Tập mà là Mounts.
SIGIS

Trang web này có một lời giải thích tốt đẹp cũng như: forums.docker.com/t/host-path-of-volume/12277/10
curveorzos

105

Với docker 1.10, giờ đây bạn có các lệnh mới cho các thùng chứa dữ liệu.
(đối với các container thông thường, xem phần tiếp theo, đối với docker 1.8+):


Với docker 1.8.1 (tháng 8 năm 2015), a docker inspect -f '{{ .Volumes }}' containeridsẽ trống!

Bây giờ bạn cần kiểm tra Mounts, đó là danh sách các đường dẫn được gắn kết như:

   "Mounts": [
       {
           "Name": "7ced22ebb63b78823f71cf33f9a7e1915abe4595fcd4f067084f7c4e8cc1afa2",
           "Source": "/mnt/sda1/var/lib/docker/volumes/7ced22ebb63b78823f71cf33f9a7e1915abe4595fcd4f067084f7c4e8cc1afa2/_data",
           "Destination": "/home/git/repositories",
           "Driver": "local",
           "Mode": "",
           "RW": true
       }
   ],

Nếu bạn muốn đường dẫn của mount đầu tiên (ví dụ), đó sẽ là (sử dụng chỉ số 0):

docker inspect -f '{{ (index .Mounts 0).Source }}' containerid

Như Mike Mitterer bình luận bên dưới :

Khá in toàn bộ:

 docker inspect -f '{{ json .Mounts }}' containerid | python -m json.tool 

Hoặc, như nhận xét của Mitja , sử dụng jqlệnh .

docker inspect -f '{{ json .Mounts }}' containerid | jq 

4
Khá in toàn bộ: docker tests -f '{{json .Mounts}}' containerid | python -m json.tool
Mike Mitterer

1
@MikeMitterer Cảm ơn bạn. Tôi đã bao gồm nhận xét của bạn trong câu trả lời để dễ nhìn hơn.
VonC

2
Nếu bạn muốn in đẹp với màu sắc đẹp, bạn có thể cài đặt jqgói dưới ubfox, sau đó chỉ cần chuyển sang gói:docker inspect -f '{{ json .Mounts }}' containerid | jq
Mitja

1
@Mitja Cảm ơn bạn. Tôi đã bao gồm nhận xét của bạn trong câu trả lời để dễ nhìn hơn.
VonC

@AlbertValdez Rất vui khi được hỗ trợ.
VonC

21

Hiển thị tên và điểm đến của khối lượng được sử dụng bởi một container:

docker container inspect \
 -f '{{ range .Mounts }}{{ .Name }}:{{ .Destination }} {{ end }}' \
 CONTAINER_ID_OR_NAME

Điều này tương thích với Docker 1.13.


9

Tôi thực sự đã googled điều này, và tìm thấy câu trả lời của riêng tôi :) Bộ nhớ của tôi những ngày này ... Và đối với những người không biết về nó, dòng lệnh là một nơi tốt đẹp để tìm và xuất bản các đoạn trích này.

Liệt kê khối lượng docker theo container.

docker ps -a --format '{{ .ID }}' | xargs -I {} docker inspect -f '{{ .Name }}{{ printf "\n" }}{{ range .Mounts }}{{ printf "\n\t" }}{{ .Type }} {{ if eq .Type "bind" }}{{ .Source }}{{ end }}{{ .Name }} => {{ .Destination }}{{ end }}{{ printf "\n" }}' {}

Ví dụ đầu ra.

root@jac007-truserv-jhb1-001 ~/gitlab $ docker ps -a --format '{{ .ID }}' | xargs -I {} docker inspect -f '{{ .Name }}{{ printf "\n" }}{{ range .Mounts }}{{ printf "\n\t" }}{{ .Type }} {{ if eq .Type "bind" }}{{ .Source }}{{ end }}{{ .Name }} => {{ .Destination }}{{ end }}{{ printf "\n" }}' {}
/gitlab_server_1

    volume gitlab-data => /var/opt/gitlab
    volume gitlab-config => /etc/gitlab
    volume gitlab-logs => /var/log/gitlab

/gitlab_runner_1

    bind /var/run/docker.sock => /var/run/docker.sock
    volume gitlab-runner-config => /etc/gitlab-runner
    volume 35b5ea874432f55a26c769e1cdb1ee3f06f78759e6f302e3c4b4aa40f3a495aa => /home/gitlab-runner

1
Cái này làm những gì tôi cần.
Andres Leon Rangel

8

Bạn có thể nhận thông tin về khối lượng nào được nướng cụ thể vào vùng chứa bằng cách kiểm tra vùng chứa và tìm trong đầu ra JSON và so sánh một vài trường. Khi bạn chạy docker inspect myContainer, các trường VolumesVolumesRWcung cấp cho bạn thông tin về TẤT CẢ các khối được gắn bên trong một thùng chứa, bao gồm cả các khối được gắn trong cả Dockerfile với VOLUMElệnh và trên dòng lệnh bằng docker run -vlệnh. Tuy nhiên, bạn có thể cô lập khối lượng nào được gắn trong thùng chứa bằng cách sử dụng docker run -vlệnh bằng cách kiểm tra HostConfig.Bindstrường trong docker inspectđầu ra JSON. Để làm rõ, HostConfig.Bindstrường này cho bạn biết khối lượng nào được gắn cụ thể trong docker runlệnh của bạn với-vLựa chọn. Vì vậy, nếu bạn tham chiếu chéo trường này với Volumestrường, bạn sẽ có thể xác định khối lượng nào được nướng vào thùng chứa bằng cách sử dụng VOLUMEcác lệnh trong Dockerfile.

Một grep có thể thực hiện điều này như:

$ docker inspect myContainer | grep -C2 Binds
...
"HostConfig": {
    "Binds": [
        "/var/docker/docker-registry/config:/registry"
    ],

Và ...

$ docker inspect myContainer | grep -C3 -e "Volumes\":"
...
"Volumes": {
    "/data": "/var/lib/docker...",
    "/config": "/var/lib/docker...",
    "/registry": "/var/docker/docker-registry/config"

Và trong ví dụ của tôi, bạn có thể thấy tôi đã gắn /var/docker/docker-registry/configvào container như /registrysử dụng -vtùy chọn trong docker runlệnh của mình và tôi đã gắn /data/configkhối lượng bằng cách sử dụng lệnh VOLUMEtrong Dockerfile của mình. Container không cần phải chạy để có được thông tin này, nhưng nó cần phải được chạy ít nhất một lần để điền vào HostConfigđầu ra JSON của docker inspectlệnh của bạn .


1
Nó là gì HostConfig.Bindsvà nó khác với như thế nào .Volumestrong câu trả lời từ @Paul?
CivilFan

1
Tôi vừa dành một giờ cuối cùng để xem qua các tài liệu API từ xanguồn để khám phá sự khác biệt và từ những gì tôi có thể nói, .Volumesliệt kê "đường dẫn gắn kết ánh xạ đối tượng (chuỗi) bên trong vùng chứa vào các đối tượng trống" và HostConfig.Bindsmô tả liên kết thực tế khối lượng -mounted trong container. Dường như với tôi đó HostConfig.Bindslà những gì bạn muốn đọc, so với .Volumes, mặc dù tôi rất thích nghe lý luận tốt hơn.
L0j1k

1
Tôi đã hỏi #dockertrên Freenode (kênh chính cho docker) và nếu tôi nghe thấy điều gì đó trở lại, tôi chắc chắn sẽ cập nhật ở đây với nhiều thông tin hơn. Đây là một câu hỏi rất hay bạn đã hỏi ở đây về sự khác biệt. Cảm ơn!
L0j1k

1
@CivFan Tôi đã sắp xếp sai rồi. Để xem khối lượng nào đã được đưa vào hình ảnh, bạn cần sử dụng cả hai trường Khối lượng và HostConfig.Binds trong đầu ra JSON của docker kiểm tra. Tôi đã tự sửa mình trong câu trả lời này, mà bây giờ ít nhiều trả lời đúng câu hỏi của bạn so với những gì tôi có trước đây. Chúc may mắn! :)
L0j1k

2
Bạn có nhận thấy HostConfig.Bindschỉ được điền khi đường dẫn máy chủ của âm lượng được chỉ định không? Ví dụ, docker run -d -v /docker-test:/docker-test postgresso với docker run -d -v /docker-test postgres. Có vẻ như docker xử lý hai trường hợp âm lượng này khá khác nhau vì một số lý do.
CivilFan

8

Đối với Docker 1.8, tôi sử dụng:

$ docker inspect -f "{{ .Config.Volumes }}" 957d2dd1d4e8
map[/xmount/dvol.01:{}]
$ 

8

nếu bạn muốn liệt kê tất cả tên thùng chứa với khối lượng có liên quan được đính kèm vào mỗi thùng chứa, bạn có thể thử điều này:

docker ps -q | xargs docker container inspect -f '{{ .Name }} {{ .HostConfig.Binds }}'

đầu ra ví dụ:

/ opt_rundeck_1 [/ opt / var / lib / mysql: / var / lib / mysql: rw / var / lib / rundeck / var / Storage: / var / lib / rundeck / var / Storage: rw / opt / var / rundeck / .ssh: /var/lib/rundeck/.ssh: rw / opt / etc / rundeck: / etc / rundeck: rw / var / log / rundeck: / var / log / rundeck: rw / opt / rundeck-plugins: / opt / rundeck-plugins: rw / opt / var / rundeck: / var / rundeck: rw]

/ opt_rundeck_1 - tên container

[..] - khối lượng gắn liền với conatiner


1
Trong khi về mặt kỹ thuật này là một câu trả lời cho câu hỏi, nó thiếu lời giải thích. Vui lòng chỉnh sửa nhận xét của bạn để bạn giải thích các tham số đang làm gì và tại sao người hỏi lại muốn sử dụng chúng để giải quyết vấn đề đặt ra trong câu hỏi của anh ấy / cô ấy.
choàng

6

Đây là một dòng lệnh để lấy thông tin âm lượng để chạy container:

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

Đầu ra là:

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[]

Phiên bản Docker:

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

3

Biến thể hữu ích cho người dùng soạn thảo docker:

docker-compose ps -q | xargs docker container inspect  \
   -f '{{ range .Mounts }}{{ .Name }}:{{ .Destination }} {{ end }}' 

Điều này sẽ rất gọn gàng đầu ra thông tin khối lượng phân tích cú pháp. Ví dụ từ dockpress-compose của tôi:

ubuntu@core $ docker-compose ps -q | xargs docker container inspect  -f '{{ range .Mounts }}{{ .Name }}:{{ .Destination }} {{ end }}' 
core_wpdb:/var/lib/mysql 
core_wpcode:/code core_wphtml:/var/www/html 

Đầu ra chứa một dòng cho mỗi container, liệt kê các khối lượng (và điểm gắn kết) được sử dụng. Thay đổi phần {{.Name}}: {{.Destination}} để xuất thông tin bạn muốn.

Nếu bạn chỉ muốn một danh sách các tập đơn giản, mỗi tập một dòng

$ docker-compose ps -q | xargs docker container inspect  \
   -f '{{ range .Mounts }}{{ .Name }} {{ end }}' \
   | xargs -n 1 echo
core_wpdb
core_wpcode
core_wphtml

Tuyệt vời để tạo một danh sách các khối lượng để sao lưu. Tôi sử dụng kỹ thuật này cùng với Blacklabelops Volumerize để sao lưu tất cả các khối lượng được sử dụng bởi tất cả các container trong một docker-compose. Các tài liệu cho Volumerize không gọi nó ra, nhưng bạn không cần sử dụng nó trong một thùng chứa liên tục hoặc sử dụng các tiện ích tích hợp để bắt đầu và dừng dịch vụ. Tôi thích để lại các hoạt động quan trọng như sao lưu và kiểm soát dịch vụ cho người dùng thực tế (bên ngoài docker). Các bản sao lưu của tôi được kích hoạt bởi tài khoản người dùng thực tế (không phải docker) và sử dụng dừng docker-compose để dừng dịch vụ, sao lưu tất cả các khối lượng đang sử dụng và cuối cùng là docker-compose bắt đầu khởi động lại.



1

Đây là phiên bản của tôi để tìm các điểm gắn kết của một docker sáng tác. Trong việc sử dụng này để sao lưu âm lượng.

 # 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

Đây là sự kết hợp của các giải pháp trước đó.


0

Nếu bạn đang sử dụng pwsh (lõi powershell), bạn có thể thử

(docker ps --format='{{json .}}' |  ConvertFrom-Json).Mounts

bạn cũng có thể thấy cả tên container và Mounts như bên dưới

docker ps --format='{{json .}}' |  ConvertFrom-Json | select Names,Mounts

Khi đầu ra được chuyển đổi thành json, bạn có thể nhận được bất kỳ thuộc tính nào.


0

Chúng tôi có thể làm điều đó mà không cần cú pháp mẫu -f Go:

docker inspect <CONTAINER_ID> | jq .[] | jq .Mounts[]

Các hoạt động jq đầu tiên jq .[]dải {}trình bao bọc đối tượng .

Hoạt động jq thứ hai sẽ trả về tất cả các mục Mount.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.