programing

도커 볼륨을 사용하는 컨테이너를 확인하는 방법은 무엇입니까?

instargram 2023. 7. 31. 21:02
반응형

도커 볼륨을 사용하는 컨테이너를 확인하는 방법은 무엇입니까?

제가 볼륨을 가지고 있고 이름이나 ID를 알고 있다고 가정해 보겠습니다.

볼륨을 사용하는 컨테이너(해당 이름 또는 ID)의 목록을 확인하려고 합니다.

이 정보를 검색하는 데 사용할 수 있는 명령은 무엇입니까?

저는 그것이 출력물에 저장될 수 있다고 생각했습니다.docker volume inspect <id>명령이지만 마운트 지점 외에는 유용한 것이 없습니다."/var/lib/docker/volumes/<id>").

docker ps볼륨별로 필터링하여 지정된 볼륨을 탑재하는 모든 컨테이너를 표시할 수 있습니다.

docker ps -a --filter volume=VOLUME_NAME_OR_MOUNT_POINT

참조: https://docs.docker.com/engine/reference/commandline/ps/ #http://filtering

아래 스크립트는 각 볼륨을 컨테이너와 함께 표시합니다.

#!/bin/sh

volumes=$(docker volume ls  --format '{{.Name}}')

for volume in $volumes
do
  echo $volume
  docker ps -a --filter volume="$volume"  --format '{{.Names}}' | sed 's/^/  /'
done

컨테이너별로 볼륨을 나열하는 것은 약간 까다롭기 때문에 독자에게는 연습이지만, 많은 컨테이너/볼륨이 없는 한 위의 내용으로 충분합니다.

이것은 누군가에게 도움이 된다면 jwodder 제안과 관련이 있습니다.기본적으로 모든 볼륨에 대한 요약이 제공됩니다. 두 개 이상의 볼륨이 있고 어떤 볼륨인지 확실하지 않은 경우에 대비합니다.

import io
import subprocess
import pandas as pd


results = subprocess.run('docker volume ls', capture_output=True, text=True)

df = pd.read_csv(io.StringIO(results.stdout),
                 encoding='utf8',
                 sep="    ",
                 engine='python')

for i, row in df.iterrows():
    print(i, row['VOLUME NAME'])
    print('-' * 20)
    cmd = ['docker', 'ps', '-a', '--filter', f'volume={row["VOLUME NAME"]}']
    print(subprocess.run(cmd,
           capture_output=True, text=True).stdout)
    print()

각 볼륨에 대해 이 스크립트는 볼륨이 여러 컨테이너에서 사용될 수 있다는 점을 염두에 두고 이 볼륨을 사용하는 컨테이너 목록을 출력합니다.

for v in $(docker volume ls --format "{{.Name}}")
do
  containers="$(docker ps -a --filter volume=$v --format '{{.Names}}' | tr '\n' ',')"
  echo "volume $v is used by $containers"
done

언급URL : https://stackoverflow.com/questions/42857575/how-to-determine-what-containers-use-the-docker-volume

반응형