docker container ls

docker container ls

docker container ls는 컨테이너를 나열하는 명령이에요. 현재 어떤 컨테이너가 있고 어떤 상태인지 확인하고 싶을 때 가장 기본적으로 쓰는 명령이에요.

출처: 문서

본문

컨테이너를 나열해요. 기본적으로 실행 중인 컨테이너만 보여 주고, -a(모두) 플래그로 정지된 컨테이너도 포함할 수 있어요.

사용법 (Usage)

docker container ls [OPTIONS]

별칭 (Aliases)

별칭은 긴 명령 대신 쓸 수 있는 짧고 기억하기 쉬운 대안이에요.

docker container list, docker container ps, docker ps

옵션 (Options)

옵션 기본값 설명
-a, --all 모든 컨테이너를 보여 줘요 (기본은 실행 중인 것만)
-f, --filter 주어진 조건에 따라 출력을 필터링해요
--format 사용자 지정 템플릿으로 출력 형식을 정해요: table(기본, 열 머리글 있는 테이블), table TEMPLATE(Go 템플릿 사용 테이블), json(JSON), TEMPLATE(Go 템플릿 사용 출력). 템플릿 출력 포맷팅에 대한 자세한 내용은 https://docs.docker.com/go/formatting/ 참고
-n, --last -1 마지막으로 생성된 n개의 컨테이너를 보여 줘요 (모든 상태 포함)
-l, --latest 가장 최근에 생성된 컨테이너를 보여 줘요 (모든 상태 포함)
--no-trunc 출력을 자르지 않아요
-q, --quiet 컨테이너 ID만 표시해요
-s, --size 총 파일 크기를 표시해요

예제 (Examples)

출력 자르지 않기 (--no-trunc)

링크된 컨테이너 2개를 보여 주는 docker ps --no-trunc 실행이에요.

$ docker ps --no-trunc

CONTAINER ID                                                     IMAGE                        COMMAND                CREATED              STATUS              PORTS               NAMES
ca5534a51dd04bbcebe9b23ba05f389466cf0c190f1f8f182d7eea92a9671d00 ubuntu:24.04                 bash                   17 seconds ago       Up 16 seconds       3300-3310/tcp       webapp
9ca9747b233100676a48cc7806131586213fa5dab86dd1972d6a8732e3a84a4d crosbymichael/redis:latest   /redis-server --dir    33 minutes ago       Up 33 minutes       6379/tcp            redis,webapp/db

실행 중인 컨테이너와 정지된 컨테이너 모두 보여 주기 (-a, --all)

docker ps 명령은 기본적으로 실행 중인 컨테이너만 보여 줘요. 모든 컨테이너를 보려면 --all(또는 -a) 플래그를 써요.

$ docker ps -a

docker ps는 가능하면 노출된 포트를 단일 범위로 묶어요. 예를 들어 TCP 포트 100·101·102를 노출하는 컨테이너는 PORTS 열에 100-102/tcp로 표시해요.

컨테이너별 디스크 사용량 보여 주기 (--size)

docker ps --size(또는 -s) 명령은 각 컨테이너에 대해 두 가지 다른 디스크 크기를 표시해요.

$ docker ps --size

CONTAINER ID   IMAGE          COMMAND                  CREATED        STATUS       PORTS   NAMES        SIZE
e90b8831a4b8   nginx          "/bin/bash -c 'mkdir "   11 weeks ago   Up 4 hours           my_nginx     35.58 kB (virtual 109.2 MB)
00c6131c5e30   telegraf:1.5   "/entrypoint.sh"         11 weeks ago   Up 11 weeks          my_telegraf  0 B (virtual 209.5 MB)

"size" 정보는 각 컨테이너의 쓰기 가능 레이어에 사용되는(디스크 상의) 데이터 양을 보여 줘요. "virtual size"는 컨테이너가 사용하는 읽기 전용 이미지 데이터와 쓰기 가능 레이어에 사용되는 총 디스크 공간이에요.

자세한 내용은 컨테이너의 디스크 크기(container size on disk) 섹션을 참고해요.

필터링하기 (--filter)

--filter(또는 -f) 플래그 형식은 key=value 쌍이에요. 필터가 여러 개면 여러 플래그를 넘겨요(예: --filter "foo=bar" --filter "bif=baz"). 현재 지원되는 필터는 다음과 같아요.

필터 설명
id 컨테이너의 ID
name 컨테이너의 이름
label 키 또는 키-값 쌍을 나타내는 임의의 문자열. <key> 또는 <key>=<value>로 표현
exited 컨테이너의 종료 코드를 나타내는 정수. --all에서만 유용
status created, restarting, running, removing, paused, exited, dead 중 하나
ancestor 주어진 이미지를 조상으로 공유하는 컨테이너를 필터링. <image-name>[:<tag>], <image id>, 또는 <image@digest>로 표현
before 또는 since 주어진 컨테이너 ID나 이름 전/후에 생성된 컨테이너를 필터링
volume 주어진 볼륨 또는 바인드 마운트를 마운트한 실행 중인 컨테이너를 필터링
network 주어진 네트워크에 연결된 실행 중인 컨테이너를 필터링
publish 또는 expose 주어진 포트를 게시하거나 노출하는 컨테이너를 필터링. <port>[/<proto>] 또는 <startport-endport>/[<proto>]로 표현
health healthcheck 상태를 기준으로 컨테이너를 필터링. starting, healthy, unhealthy, none 중 하나
isolation Windows 데몬 전용. default, process, hyperv 중 하나
is-task 서비스의 "task"인 컨테이너를 필터링. 불리언 옵션 (true 또는 false)

label

label 필터는 라벨의 존재만으로 또는 라벨과 값으로 컨테이너를 매칭해요. 다음 필터는 값과 무관하게 color 라벨이 있는 컨테이너를 매칭해요.

$ docker ps --filter "label=color"

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
673394ef1d4c        busybox             "top"               47 seconds ago      Up 45 seconds                           nostalgic_shockley
d85756f57265        busybox             "top"               52 seconds ago      Up 51 seconds                           high_albattani

다음 필터는 color 라벨 값이 blue인 컨테이너를 매칭해요.

$ docker ps --filter "label=color=blue"

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
d85756f57265        busybox             "top"               About a minute ago   Up About a minute                       high_albattani

name

name 필터는 컨테이너 이름의 전체 또는 일부를 매칭해요. 다음 필터는 이름에 nostalgic_stallman 문자열이 포함된 모든 컨테이너를 매칭해요.

$ docker ps --filter "name=nostalgic_stallman"

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
9b6247364a03        busybox             "top"               2 minutes ago       Up 2 minutes                            nostalgic_stallman

이처럼 이름의 부분 문자열로 필터링할 수도 있어요.

$ docker ps --filter "name=nostalgic"

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
715ebfcee040        busybox             "top"               3 seconds ago       Up 1 second                             i_am_nostalgic
9b6247364a03        busybox             "top"               7 minutes ago       Up 7 minutes                            nostalgic_stallman
673394ef1d4c        busybox             "top"               38 minutes ago      Up 38 minutes                           nostalgic_shockley

exited

exited 필터는 종료 상태 코드로 컨테이너를 매칭해요. 예를 들어 성공적으로 종료된 컨테이너를 필터링하려면:

$ docker ps -a --filter 'exited=0'

CONTAINER ID        IMAGE             COMMAND                CREATED             STATUS                   PORTS                      NAMES
ea09c3c82f6e        registry:latest   /srv/run.sh            2 weeks ago         Exited (0) 2 weeks ago   127.0.0.1:5000->5000/tcp   desperate_leakey
106ea823fe4e        fedora:latest     /bin/sh -c 'bash -l'   2 weeks ago         Exited (0) 2 weeks ago                              determined_albattani
48ee228c9464        fedora:20         bash                   2 weeks ago         Exited (0) 2 weeks ago                              tender_torvalds

종료 신호로 필터링

상태 137(SIGKILL(9)이 종료시킴을 의미)로 종료된 컨테이너를 찾는 데 필터를 쓸 수 있어요.

$ docker ps -a --filter 'exited=137'

CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                       PORTS               NAMES
b3e1c0ed5bfe        ubuntu:latest       "sleep 1000"           12 seconds ago      Exited (137) 5 seconds ago                       grave_kowalevski
a2eb5558d669        redis:latest        "/entrypoint.sh redi   2 hours ago         Exited (137) 2 hours ago                         sharp_lalande

다음 이벤트 중 하나라도 발생하면 137 상태가 돼요.

  • 컨테이너의 init 프로세스가 수동으로 종료됨
  • docker kill이 컨테이너를 종료함
  • Docker 데몬이 재시작되어 실행 중인 모든 컨테이너를 종료함

status

status 필터는 상태로 컨테이너를 매칭해요. 컨테이너 상태의 가능한 값은 다음과 같아요.

상태 설명
created 한 번도 시작된 적 없는 컨테이너
running docker start 또는 docker run으로 시작된 실행 중인 컨테이너
paused 일시 중지된 컨테이너. docker pause 참고
restarting 해당 컨테이너의 지정된 재시작 정책 때문에 시작 중인 컨테이너
exited 더 이상 실행되지 않는 컨테이너. 예: 컨테이너 안의 프로세스가 완료되거나 docker stop으로 중지된 컨테이너
removing 제거되는 과정에 있는 컨테이너. docker rm 참고
dead "defunct" 컨테이너. 예: 외부 프로세스가 리소스를 점유해 일부만 제거된 컨테이너. dead 컨테이너는 (다시) 시작할 수 없고 제거만 가능

예를 들어 실행 중인 컨테이너를 필터링하려면:

$ docker ps --filter status=running

CONTAINER ID        IMAGE                  COMMAND             CREATED             STATUS              PORTS               NAMES
715ebfcee040        busybox                "top"               16 minutes ago      Up 16 minutes                           i_am_nostalgic
d5c976d3c462        busybox                "top"               23 minutes ago      Up 23 minutes                           top
9b6247364a03        busybox                "top"               24 minutes ago      Up 24 minutes                           nostalgic_stallman

일시 중지된 컨테이너를 필터링하려면:

$ docker ps --filter status=paused

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
673394ef1d4c        busybox             "top"               About an hour ago   Up About an hour (Paused)                       nostalgic_shockley

ancestor

ancestor 필터는 이미지 또는 그 하위 이미지를 기준으로 컨테이너를 매칭해요. 필터는 다음 이미지 표현을 지원해요.

  • image
  • image:tag
  • image:tag@digest
  • short-id
  • full-id

태그를 지정하지 않으면 latest 태그가 사용돼요. 예를 들어 latest ubuntu 이미지를 사용하는 컨테이너를 필터링하려면:

$ docker ps --filter ancestor=ubuntu

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
919e1179bdb8        ubuntu-c1           "top"               About a minute ago   Up About a minute                       admiring_lovelace
5d1e4a540723        ubuntu-c2           "top"               About a minute ago   Up About a minute                       admiring_sammet
82a598284012        ubuntu              "top"               3 minutes ago        Up 3 minutes                            sleepy_bose
bab2a34ba363        ubuntu              "top"               3 minutes ago        Up 3 minutes                            focused_yonath

이 경우 ubuntu의 자식인 ubuntu-c1 이미지를 기준으로 컨테이너를 매칭해요.

$ docker ps --filter ancestor=ubuntu-c1

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
919e1179bdb8        ubuntu-c1           "top"               About a minute ago   Up About a minute                       admiring_lovelace

ubuntu 버전 24.04 이미지를 기준으로 컨테이너를 매칭하려면:

$ docker ps --filter ancestor=ubuntu:24.04

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
82a598284012        ubuntu:24.04        "top"               3 minutes ago        Up 3 minutes                            sleepy_bose

다음은 레이어 d0e008c6cf02 또는 해당 레이어를 레이어 스택에 가진 이미지를 기준으로 컨테이너를 매칭해요.

$ docker ps --filter ancestor=d0e008c6cf02

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
82a598284012        ubuntu:24.04        "top"               3 minutes ago        Up 3 minutes                            sleepy_bose

생성 시간 (Create time)

before

before 필터는 주어진 ID나 이름의 컨테이너보다 먼저 생성된 컨테이너만 보여 줘요. 예를 들어 이런 컨테이너들이 생성되어 있다고 해 볼게요.

$ docker ps

CONTAINER ID        IMAGE       COMMAND       CREATED              STATUS              PORTS              NAMES
9c3527ed70ce        busybox     "top"         14 seconds ago       Up 15 seconds                          desperate_dubinsky
4aace5031105        busybox     "top"         48 seconds ago       Up 49 seconds                          focused_hamilton
6e63f6ff38b0        busybox     "top"         About a minute ago   Up About a minute                      distracted_fermat

before로 필터링하면 다음과 같아요.

$ docker ps -f before=9c3527ed70ce

CONTAINER ID        IMAGE       COMMAND       CREATED              STATUS              PORTS              NAMES
4aace5031105        busybox     "top"         About a minute ago   Up About a minute                      focused_hamilton
6e63f6ff38b0        busybox     "top"         About a minute ago   Up About a minute                      distracted_fermat

since

since 필터는 주어진 ID나 이름의 컨테이너 이후에 생성된 컨테이너만 보여 줘요. 예를 들어 before 필터의 컨테이너와 같은 컨테이너들로:

$ docker ps -f since=6e63f6ff38b0

CONTAINER ID        IMAGE       COMMAND       CREATED             STATUS              PORTS               NAMES
9c3527ed70ce        busybox     "top"         10 minutes ago      Up 10 minutes                           desperate_dubinsky
4aace5031105        busybox     "top"         10 minutes ago      Up 10 minutes                           focused_hamilton

volume

volume 필터는 특정 볼륨을 마운트하거나 특정 경로에 볼륨을 마운트한 컨테이너만 보여 줘요.

$ docker ps --filter volume=remote-volume --format "table {{.ID}}\t{{.Mounts}}"

CONTAINER ID        MOUNTS
9c3527ed70ce        remote-volume

$ docker ps --filter volume=/data --format "table {{.ID}}\t{{.Mounts}}"

CONTAINER ID        MOUNTS
9c3527ed70ce        remote-volume

network

network 필터는 주어진 이름이나 ID의 네트워크에 연결된 컨테이너만 보여 줘요. 다음 필터는 이름에 net1이 포함된 네트워크에 연결된 모든 컨테이너를 매칭해요.

$ docker run -d --net=net1 --name=test1 ubuntu top
$ docker run -d --net=net2 --name=test2 ubuntu top

$ docker ps --filter network=net1

CONTAINER ID        IMAGE       COMMAND       CREATED             STATUS              PORTS               NAMES
9d4893ed80fe        ubuntu      "top"         10 minutes ago      Up 10 minutes                           test1

network 필터는 네트워크의 이름과 ID 양쪽 모두에 매칭돼요. 다음 예제는 네트워크 ID를 필터로 써서 net1 네트워크에 연결된 모든 컨테이너를 보여 줘요.

$ docker network inspect --format "{{.ID}}" net1

8c0b4110ae930dbe26b258de9bc34a03f98056ed6f27f991d32919bfe401d7c5

$ docker ps --filter network=8c0b4110ae930dbe26b258de9bc34a03f98056ed6f27f991d32919bfe401d7c5

CONTAINER ID        IMAGE       COMMAND       CREATED             STATUS              PORTS               NAMES
9d4893ed80fe        ubuntu      "top"         10 minutes ago      Up 10 minutes                           test1

publish와 expose

publishexpose 필터는 주어진 포트 번호·포트 범위·프로토콜을 게시하거나 노출한 컨테이너만 보여 줘요. 지정하지 않으면 기본 프로토콜은 tcp예요. 다음 필터는 80 포트를 게시한 모든 컨테이너를 매칭해요.

$ docker run -d --publish=80 busybox top
$ docker run -d --expose=8080 busybox top

$ docker ps -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                   NAMES
9833437217a5        busybox             "top"               5 seconds ago       Up 4 seconds        8080/tcp                dreamy_mccarthy
fc7e477723b7        busybox             "top"               50 seconds ago      Up 50 seconds       0.0.0.0:32768->80/tcp   admiring_roentgen

$ docker ps --filter publish=80

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                   NAMES
fc7e477723b7        busybox             "top"               About a minute ago   Up About a minute   0.0.0.0:32768->80/tcp   admiring_roentgen

다음 필터는 8000-8080 범위의 TCP 포트를 노출한 모든 컨테이너를 매칭해요.

$ docker ps --filter expose=8000-8080/tcp

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
9833437217a5        busybox             "top"               21 seconds ago      Up 19 seconds       8080/tcp            dreamy_mccarthy

다음 필터는 UDP 80 포트를 게시한 모든 컨테이너를 매칭해요.

$ docker ps --filter publish=80/udp

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

출력 형식 지정하기 (--format)

형식 옵션(--format)은 Go 템플릿으로 컨테이너 출력을 pretty-print해요. Go 템플릿의 유효한 자리표시자는 다음과 같아요.

자리표시자 설명
.ID 컨테이너 ID
.Image 이미지 ID
.Command 인용된 명령
.CreatedAt 컨테이너가 생성된 시각
.RunningFor 컨테이너가 시작된 이후 경과 시간
.Ports 노출된 포트
.State 컨테이너 상태 (예: created, running, exited)
.Status 기간과 health 상태에 대한 세부 정보가 포함된 컨테이너 상태
.HealthStatus 컨테이너 health 상태 (starting, healthy, unhealthy; 사용할 수 없으면 빈 값)
.Size 컨테이너 디스크 크기
.Names 컨테이너 이름
.Labels 컨테이너에 지정된 모든 라벨
.Label 이 컨테이너의 특정 라벨 값. 예: {{.Label "com.docker.swarm.cpu"}}
.Mounts 이 컨테이너에 마운트된 볼륨의 이름
.Networks 이 컨테이너에 연결된 네트워크의 이름

--format 옵션을 쓰면 ps 명령은 템플릿이 선언한 대로 데이터를 정확히 출력하거나, table 지시자를 쓰면 열 머리글도 함께 포함해요. 다음 예제는 머리글이 없는 템플릿을 써서 모든 실행 중인 컨테이너에 대해 콜론(:)으로 구분된 ID와 Command 항목을 출력해요.

$ docker ps --format "{{.ID}}: {{.Command}}"

a87ecb4f327c: /bin/sh -c #(nop) MA
01946d9d34d8: /bin/sh -c #(nop) MA
c1d3b0166030: /bin/sh -c yum -y up
41d50ecd2f57: /bin/sh -c #(nop) MA

모든 실행 중인 컨테이너를 라벨과 함께 테이블 형식으로 나열하려면 이렇게 써요.

$ docker ps --format "table {{.ID}}\t{{.Labels}}"

CONTAINER ID        LABELS
a87ecb4f327c        com.docker.swarm.node=ubuntu,com.docker.swarm.storage=ssd
01946d9d34d8
c1d3b0166030        com.docker.swarm.node=debian,com.docker.swarm.cpu=6
41d50ecd2f57        com.docker.swarm.node=fedora,com.docker.swarm.cpu=3,com.docker.swarm.storage=ssd

모든 실행 중인 컨테이너를 JSON 형식으로 나열하려면 json 지시자를 써요.

$ docker ps --format json
{"Command":"\"/docker-entrypoint.…\"","CreatedAt":"2021-03-10 00:15:05 +0100 CET","ID":"a762a2b37a1d","Image":"nginx","Labels":"maintainer=NGINX Docker Maintainers \[email protected]\u003e","LocalVolumes":"0","Mounts":"","Names":"boring_keldysh","Networks":"bridge","Ports":"80/tcp","RunningFor":"4 seconds ago","Size":"0B","State":"running","Status":"Up 3 seconds"}

더 알아보기 (Learn more)