Docker Engine 23.0 릴리스 노트

Docker Engine 23.0 릴리스 노트

Docker Engine 23.0 버전의 변경 사항을 정리한 릴리스 노트입니다. 이 버전부터 버전 관리 방식이 바뀌었고, Buildx도 별도 패키지로 분리되었으니 업그레이드 전에 꼭 확인하셔야 합니다. 하나씩 차근차근 살펴보겠습니다.

출처: 공식문서

업그레이드 전에 알아두세요

Docker Engine 23.0.0부터 Buildx가 docker-buildx-plugin이라는 별도 패키지로 분리되어 배포됩니다. 이전 버전에서는 Buildx가 docker-ce-cli 패키지에 포함되어 있었기 때문에, 이번 버전으로 업그레이드할 때는 관련 패키지를 모두 함께 업데이트해야 합니다. 예를 들어 Ubuntu에서는 다음과 같이 설치합니다:

$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

운영체제별 자세한 업그레이드 방법은 Docker Engine 설치 안내를 참고하세요.

이 페이지에서는 Docker Engine 23.0의 최신 변경 사항, 추가 기능, 알려진 이슈, 수정 사항을 다룹니다. 추가로 다음 문서도 참고하시면 좋습니다:

23.0.0 릴리스부터 Docker Engine은 CalVer 버전 체계를 사용하지 않고 SemVer 버전 체계를 사용합니다. 이는 향후 Go 모듈 호환성을 위한 준비 단계이지만, 아직 저장소가 Go 모듈을 사용하지는 않으므로 +incompatible 버전을 계속 사용해야 합니다. Go 모듈 호환성 작업은 향후 릴리스에서 계속 진행될 예정입니다.

23.0.6 (2023-05-08)

이 릴리스의 전체 PR과 변경 사항은 GitHub 마일스톤에서 확인할 수 있습니다:

버그 수정 및 개선

  • NFS 환경에서 vfs 스토리지 드라이버가 동작하지 않던 문제를 수정했습니다. moby/moby#45465

패키징 업데이트

23.0.5 (2023-04-26)

이 릴리스의 전체 PR과 변경 사항은 GitHub 마일스톤에서 확인할 수 있습니다:

버그 수정 및 개선

  • 볼륨 프루닝(pruning) 시 --all / -a 옵션을 사용할 수 있게 되었습니다. docker/cli#4229
  • docker info--format=json 옵션이 추가되었습니다. docker/cli#4320
  • AWSLogs 로그 드라이버에서 로그가 유실되던 문제를 수정했습니다. moby/moby#45350
  • v23.0.4에서 도입된 회귀(regression) 문제를 수정했습니다. fixed-cidr 설정은 있는데 bip 설정이 없으면 dockerd가 시작을 거부하던 문제였습니다. moby/moby#45403
  • 데몬 시작 중 libnetwork에서 발생하던 패닉(panic)을 수정했습니다. moby/moby#45376
  • buildx로 이미지를 빌드할 때 "tag" 이벤트가 전송되지 않던 문제를 수정했습니다. moby/moby#45410

패키징 업데이트

23.0.4 (2023-04-17)

이 릴리스의 전체 PR과 변경 사항은 GitHub 마일스톤에서 확인할 수 있습니다:

버그 수정 및 개선

  • Docker CLI 23.0.0에서 발생한 성능 저하 문제를 수정했습니다. docker/cli#4141
  • docker cp의 진행 표시줄이 의도대로 동작하지 않던 문제를 수정했습니다. docker/cli#4157
  • docker compose --file의 셸 자동 완성이 동작하지 않던 문제를 수정했습니다. docker/cli#4177
  • daemon.json에서 default-address-pools를 잘못 처리하여 발생하던 오류를 수정했습니다. moby/moby#45246

패키징 업데이트

23.0.3 (2023-04-04)

참고: CentOS 9 Stream 패키지 저장소 문제로 인해 CentOS 9용 패키지는 현재 사용할 수 없습니다. CentOS 9 패키지는 이후에 추가되거나 다음 패치 릴리스(23.0.4)에 포함될 수 있습니다.

버그 수정 및 개선

  • Swarm 암호화 오버레이 네트워크가 보장을 제대로 유지하지 못하는 여러 문제를 수정했습니다. 관련 보안 취약점은 CVE-2023-28841, CVE-2023-28840, CVE-2023-28842입니다.
  • 암호화 오버레이 네트워크에 필요한 커널 지원이 없으면 이제 오류로 보고됩니다.
  • 암호화 오버레이 네트워크가 여러 노드가 붙을 때까지 기다리지 않고 즉시 설정됩니다.
  • Red Hat Enterprise Linux 9에서 xt_bpf 커널 모듈을 사용하여 암호화 오버레이 네트워크를 사용할 수 있게 되었습니다.
  • Swarm 오버레이 네트워크 사용자는 GHSA-vwm3-crmr-xfxw를 검토하여 의도치 않은 노출이 없었는지 확인하시기 바랍니다.

패키징 업데이트

  • containerdv1.6.20으로 업그레이드했습니다.
  • runcv1.1.5로 업그레이드했습니다.

23.0.2 (2023-03-28)

이 릴리스의 전체 PR과 변경 사항은 GitHub 마일스톤에서 확인할 수 있습니다:

버그 수정 및 개선

  • AppArmor가 활성화된 커널이 감지되었을 때 apparmor_parser 누락에 대한 검사를 완전히 보완했습니다. containerd/containerd#8087, moby/moby#45043
  • BuildKit 빌드 정보 생성 시 Git URL에서 자격 증명(credentials)이 노출되지 않도록 수정했습니다. CVE-2023-26054를 해결합니다. moby/moby#45110
  • Dockerfile의 VOLUME 지시문으로 생성된 익명 볼륨이 볼륨 프루닝에서 제외되던 문제를 수정했습니다. moby/moby#45159
  • Swarm 노드에서 볼륨 제거 시 오류가 제대로 전파되지 않던 문제를 수정했습니다. moby/moby#45155
  • BuildKit COPY --link의 버그를 임시로 우회하기 위해 mergeop/diffop 최적화를 비활성화했습니다. moby/moby#45112
  • 상위 Swarm 작업이 제거될 때 하위 작업이 제대로 정리되지 않던 문제를 수정했습니다. moby/swarmkit#3112, moby/moby#45107
  • GenericResource와 기본이 아닌 네트워크를 함께 사용할 수 있도록 Swarm 서비스 생성 로직을 수정했습니다. moby/swarmkit#3082, moby/moby#45107
  • Swarm CSI 지원에서 볼륨을 게시하기 위해 CSI 플러그인이 스테이징 엔드포인트를 제공해야 하던 문제를 수정했습니다. moby/swarmkit#3116, moby/moby#45107
  • 일부 구성에서 로그 버퍼링으로 인해 발생하던 패닉을 수정했습니다. containerd/fifo#47, moby/moby#45051
  • REST에서 Swarm gRPC API 변환 계층의 오류 로그를 디버그 레벨로 기록하여 중복과 노이즈를 줄였습니다. moby/moby#45016
  • 컨테이너 외부에서 systemd-resolved를 사용할 때 --dns-opt 또는 --dns-search로 생성된 컨테이너의 DNS 해석 문제를 수정했습니다. moby/moby#45000
  • 컨테이너 내부에서 발생한 DNS 쿼리 처리 중 오류 로깅 시 패닉이 발생하던 문제를 수정했습니다. moby/moby#44980
  • docker ps--size=false 옵션을 추가하여 크기 계산을 건너뛸 수 있게 되어 속도가 개선되었습니다. docker/cli#4107
  • Bash 자동 완성 지원을 모든 플러그인으로 확장했습니다. docker/cli#4092
  • Windows에서 cmd.exe가 설정한 특수 환경 변수가 있을 때 docker stack deploy가 실패하던 문제를 수정했습니다. docker/cli#4083
  • 빈 이미지 태그를 <none>과 동일하게 취급하여 향후 API 버전과의 호환성을 확보했습니다. docker/cli#4065
  • 컨텍스트 파일을 원자적으로(atomically) 작성하여 손상 확률을 크게 줄이고, 손상된 컨텍스트에 대한 오류 메시지를 개선했습니다. docker/cli#4063

패키징

23.0.1 (2023-02-09)

이 릴리스의 전체 PR과 변경 사항은 GitHub 마일스톤에서 확인할 수 있습니다:

버그 수정 및 개선

  • 커널에 AppArmor가 활성화되어 있는데 apparmor_parser를 사용할 수 없으면 컨테이너가 시작되지 않던 문제를 수정했습니다. moby/moby#44942
  • 인라인 캐싱을 사용하는 BuildKit 빌드가 데몬을 크래시시키던 문제를 수정했습니다. moby/moby#44944
  • BuildKit이 이전 버전에서 생성된 캐시 레이어를 잘못 로드하던 문제를 수정했습니다. moby/moby#44959
  • 업그레이드 전에 생성된 ipvlan 네트워크가 데몬 시작을 방해하던 문제를 수정했습니다. moby/moby#44937
  • 지원되지 않는 백킹 파일시스템에서 초기화할 때 overlay2 스토리지 드라이버의 metacopy 테스트가 조기에 실패하던 문제를 수정했습니다. moby/moby#44922
  • Kata Containers 같은 일부 런타임에서 exec 종료 이벤트가 컨테이너 종료로 잘못 해석되던 문제를 수정했습니다. moby/moby#44892
  • API가 요청 중간에 연결을 끊어 잘린 JSON 응답을 받았을 때 CLI가 반환하는 오류 메시지를 개선했습니다. docker/cli#4004
  • Go 1.20으로 컴파일된 runc로 디렉터리를 실행하려 할 때 CLI 종료 코드가 잘못되던 문제를 수정했습니다. docker/cli#4004
  • --device-write-bps의 크기 인자를 경로로 잘못 처리하던 문제를 수정했습니다. docker/cli#4004

패키징

  • RPM 및 DEB 패키징에 /etc/docker를 추가했습니다. docker/docker-ce-packaging#842
  • 모든 사용 사례에 도움이 되지는 않으므로, 이 디렉터리에 의존한다면 직접 mkdir -p /etc/docker를 실행하는 것이 좋습니다.
  • Compose를 v2.16.0으로 업그레이드했습니다. docker/docker-ce-packaging#844

23.0.0 (2023-02-01)

이 릴리스의 전체 PR과 변경 사항은 GitHub 마일스톤에서 확인할 수 있습니다:

새로운 기능

  • Linux에서 Buildx와 BuildKit이 기본 빌더로 설정되었습니다. moby/moby#43992
  • docker builddocker buildx build의 별칭(alias)이 되었습니다. docker/cli#3314
  • 레거시 빌더를 계속 사용하려면 DOCKER_BUILDKIT=0을 명시적으로 설정하면 됩니다.
  • BuildKit과 레거시 빌더는 멀티 스테이지 빌드 처리 방식에 차이가 있습니다. 자세한 내용은 Multi-stage builds 문서를 참고하세요.
  • zstd 압축 레이어를 pull하는 기능이 추가되었습니다. moby/moby#41759, moby/moby#42862
  • containerd 런타임 v2 API와 호환되는 대체 OCI 런타임을 Linux에서 지원합니다. moby/moby#43887, moby/moby#43993
  • Windows에서 containerd runhcs shim을 지원합니다(기본적으로 비활성화). moby/moby#42089
  • dockerd --validate 명령으로 데몬 JSON 설정을 검사하고 종료할 수 있습니다. moby/moby#42393
  • 플래그 또는 JSON 설정으로 데몬의 HTTP 프록시를 구성할 수 있습니다. moby/moby#42835
  • RFC 3021 점대점 네트워크(IPv4 /31)와 단일 호스트(IPv4 /32)를 지원합니다. 주소가 2개 이하인 네트워크에서는 IPAM이 네트워크 주소와 브로드캐스트 주소를 예약하지 않습니다. moby/moby#42626
  • ipvlan 네트워크 드라이버에서 ipvlan_flag 설정과 l3s ipvlan_mode를 지원합니다. moby/moby#42542
  • overlay2 스토리지 드라이버의 metacopy 옵션 값을 표시하는 기능이 추가되었습니다. moby/moby#43557
  • Windows 장치를 IDType://ID 구문으로 설명하는 기능이 추가되었습니다. moby/moby#43368
  • RootlessKit, slirp4netns, VPNKit 버전 정보를 보고하는 기능이 추가되었습니다. moby/moby#42330
  • SwarmKit 클러스터 볼륨(CSI)에 대한 실험적 지원이 추가되었습니다. moby/moby#41982
  • CLI: docker volume에 클러스터 볼륨(CSI) 옵션이 추가되었습니다. docker/cli#3606
  • CLI: docker stack에 클러스터 볼륨(CSI) 지원이 추가되었습니다. docker/cli#3662
  • docker stack deploy에서 SwarmKit 작업(jobs)을 지원합니다. docker/cli#2907
  • docker stack config 명령이 추가되어 stack deploy에서 사용하는 병합 및 보간된 설정 파일을 출력할 수 있습니다. docker/cli#3544
  • 현재 컨텍스트 이름을 출력하는 docker context show 명령이 추가되었습니다. docker/cli#3567
  • --format 플래그를 지원하는 모든 명령에 --format="{{ json . }}"의 축약형인 --format=json이 추가되었습니다. docker/cli#2936
  • docker createdocker run에 이미지 pull 시 출력을 억제하는 --quiet 옵션이 추가되었습니다. docker/cli#3377
  • docker network rm 하위 명령에 --force 옵션이 추가되었습니다. 네트워크가 존재하지 않아도 CLI가 0 종료 코드를 반환합니다. 서버 측 네트워크 제거 절차에는 영향을 주지 않습니다. docker/cli#3547
  • docker stopdocker restart--signal 옵션이 추가되었습니다. docker/cli#3614
  • docker-proxy-v/--version 플래그가 추가되었습니다. moby/moby#44703
  • 데몬이 rootless 모드로 실행될 때 잘 알려진 사용자 수준 경로에서 플러그인을 발견하도록 개선되었습니다. moby/moby#44778
  • 데몬이 JSON 설정 파일에서 흔한 대체 JSON 인코딩을 처리하고 유용한 오류를 보고합니다. moby/moby#44777, moby/moby#44832
    • BOM(Byte Order Mark)이 있는 UTF-8을 허용합니다.
    • BOM이 있는 UTF-16을 허용합니다.
    • 잘못된 UTF-8은 초기에 이해하기 쉬운 오류 메시지로 보고됩니다.
  • docker commit에서 STOPSIGNAL을 사용할 수 있습니다. moby/moby#43369
  • awslogs 로그 드라이버에 CloudWatch에서 로그 스트림 생성을 건너뛰는 새 옵션이 추가되었습니다. moby/moby#42132
  • awslogs 로그 드라이버에 CloudWatch로 전송할 로그 형식을 지정하는 새 옵션이 추가되었습니다. moby/moby#42838
  • fluentd 로그 드라이버에 재연결 간격을 설정하는 새 옵션이 추가되었습니다. moby/moby#43100
  • Go API 클라이언트에 새 옵션 세터가 추가되었습니다: WithTLSClientConfigFromEnv(), WithHostFromEnv(), WithVersionFromEnv(). moby/moby#42224
  • docker completion 하위 명령을 통해 셸 명령 자동 완성을 생성할 수 있습니다. docker/cli#3429
  • API: GET /_pingHEAD /_pingSwarm 헤더가 추가되어 단일 요청으로 Swarm 지원 여부를 감지할 수 있습니다. moby/moby#42064
  • API: POST /containers/{id}/stopPOST /containers/{id}/restart에 사용할 시그널을 지정하는 signal 파라미터가 추가되었습니다. moby/moby#43206
  • API: POST /containers/createCreateMountPoint 파라미터가 추가되었습니다. moby/moby#43484
  • API: GET /images/json에 이미지의 공유 크기 계산을 활성화하는 shared-size 파라미터가 추가되었습니다. moby/moby#42531
  • API: GET /system/df에 디스크 사용량 계산 시 고려할 객체 유형을 제어하는 type 파라미터가 추가되었습니다. moby/moby#42559
  • systemd: 데몬 관리 containerd 대신 systemd 관리 containerd를 사용합니다. moby/moby#42373
  • systemd: docker.servicetime-set.target 이후에 시작됩니다. moby/moby#43107

제거된 기능

  • ~/.dockercfg에서 설정을 읽는 지원이 제거되었습니다. docker/cli#2504
  • -g--graph 데몬 옵션이 제거되었습니다. --data-root를 사용하세요. docker/cli#3739
  • 클라이언트 측 결과 정렬이 제거되었습니다. 검색 API가 반환하는 순서를 그대로 사용합니다. docker/cli#3470
  • CLI에서 deprecated 스토리지 드라이버 관련 경고가 제거되었습니다. 이제 경고는 데몬이 처리합니다. docker/cli#3542
  • docker version에서 Experimental 클라이언트 필드가 제거되었습니다. docker/cli#3543
  • deprecated 스토리지 드라이버를 사용하려면 명시적인 동의가 필요하며, 업그레이드 시 자동으로 선택되지 않습니다. moby/moby#43378
  • d_type을 지원하지 않는 백킹 파일시스템에서 overlayoverlay2 스토리지 드라이버에 대한 deprecated 지원이 제거되었습니다. moby/moby#43472
  • overlay2 스토리지 드라이버에서 deprecated된 overrideKernelCheck 옵션이 제거되었습니다. moby/moby#44279
  • deprecated된 io.containerd.runtime.v1.linux OCI 런타임 지원이 제거되었습니다. moby/moby#43695
  • LCOW(Linux Containers on Windows)가 제거되었습니다. moby/moby#42451, moby/moby#42499, moby/moby#42506, moby/moby#42511, moby/moby#42520, moby/moby#42683, moby/moby#42684, moby/moby#42685, moby/moby#43187
    • LCOW는 17.09에서 기술 프리뷰로 도입되었고 20.10에서 deprecated되었습니다.
    • Deprecation 공지
  • 독립형 Swarm에서 사용되던 레거시 오버레이 네트워크 관련 데몬 옵션이 제거되었습니다.
  • deprecated된 arm 플랫폼 폴백이 제거되었습니다. --platform linux/arm/vY는 이제 arm/vY를 사용할 수 없을 때 잘못된 이미지를 pull하는 대신 오류를 반환합니다. moby/moby#44414
  • Go 클라이언트 API에서 deprecated된 SetCustomHTTPHeaders(), CustomHTTPHeaders() 옵션 세터가 제거되었습니다. moby/moby#42694
  • Go 클라이언트 API에서 deprecated된 WithDialer() 옵션 세터가 제거되었습니다. moby/moby#44022
    • WithDialContext()를 대신 사용하세요.
  • 데몬의 opts.QuotedString 구현이 제거되었습니다. 구현이 CLI로 이동했습니다. moby/moby#43250
  • 데몬에서 trust-key의 별도 데몬 ID가 제거되었고, trust-key 생성이 비활성화되었습니다. moby/moby#43555
  • API: API 버전 >= 1.42에서 POST /containers/create의 deprecated된 KernelMemory 옵션이 제거되었습니다. moby/moby#43214

Deprecated된 기능

  • 데몬 실행을 위한 최소 Windows 버전으로 Windows Server RS5 / LTSC 2019(빌드 17763)이 요구됩니다. moby/moby#43254
  • API 버전 >= 1.42에서 BuilderSize가 deprecated되었습니다. moby/moby#42608
  • API 버전 >= 1.42에서 BuildCache.Parent가 deprecated되고 새로 도입된 BuildCache.Parents로 대체되었습니다. moby/moby#43908
  • pkg/urlutil이 deprecated되고 구현이 builder/remotecontext/urlutil로 이동했습니다. moby/moby#43477

업그레이드

보안

  • 컨테이너 hostconfig.json 파일의 권한이 0644에서 0600으로 변경되었습니다. moby/moby#41620
  • --seccomp-profileunconfined를 허용하지 않던 문제를 수정하고, 기본 seccomp 프로필 이름을 builtin으로 변경했습니다. moby/moby#42481
  • 항상 seccomp 지원으로 빌드하며, seccomp 빌드 태그를 제거했습니다. moby/moby#42501
  • riscv64에서 seccomp를 지원합니다. moby/moby#43553
  • seccomp 프로필에서 seccomp(2)에 전달되는 플래그를 설정하는 기능이 추가되었습니다. moby/moby#42648
  • seccomp 유형을 runtime-spec을 재사용하도록 리팩터링하고 ErrnoRet를 지원합니다. moby/moby#42005
  • seccomp 프로필에서 DefaultErrnoRet를 지원합니다. moby/moby#42604
  • 기본 seccomp 프로필에 동작 변경 없이 명시적 DefaultErrnoRet 필드를 추가했습니다. moby/moby#42649
  • 기본 seccomp 프로필에서 AF_VSOCK을 사용한 socket 호출을 차단합니다. moby/moby#44563
  • 기본 seccomp 프로필에서 process_vm_readvprocess_vm_writev를 다시 활성화했습니다. moby/moby#42083
  • 기본 seccomp 프로필에 PKU 관련 syscall을 추가했습니다. moby/moby#43812
  • CAP_SYS_TIME이 있으면 clock_settime64를 허용합니다. moby/moby#43775
  • CAP_BPF가 있으면 bpf를, CAP_PERFMON이 있으면 perf_event_open을 허용합니다. moby/moby#43988
  • 기본 seccomp 프로필에서 clone3 syscall이 ENOSYS를 반환하도록 명시적으로 설정하여 glibcclone으로 올바르게 폴백하도록 했습니다. moby/moby#42681

버그 수정 및 개선

  • overlay2가 기본 스토리지 드라이버로 승격되었습니다(btrfszfs는 이제 옵트인 방식). moby/moby#42661
  • docker cp 명령에 로딩 스피너가 추가되었습니다. docker/cli#2708
  • ElectAuthServer 함수가 deprecated되고, GET /info API 엔드포인트를 호출하지 않고 기본 레지스트리를 반환하도록 변경되었습니다. docker/cli#2819
  • Swarm 서비스 롤백 시 진행 표시줄이 더 이상 반대로 표시되지 않습니다. docker/cli#2940
  • net.JoinHostPort()를 사용하여 IPv6 주소 형식 문제를 수정했습니다. docker/cli#2972
  • CLI 오류 메시지가 이제 stderr로 출력됩니다. docker/cli#3044
  • 로컬 정보만 사용하는 사용자 지정 --format을 사용할 때 docker info의 성능이 개선되었습니다. 이제 CLI는 데몬 정보가 필요하다고 감지할 때만 데몬 API를 사용합니다. docker/cli#3179
  • --stop-signal 플래그의 기본값이 제거되었습니다. 데몬이 실제로 사용하는 기본값과 다를 수 있기 때문입니다. docker/cli#3245
  • docker stack에 Compose 스키마 3.10이 추가되었고, version 필드를 생략할 수 있습니다(latest로 간주). docker/cli#3257
  • docker stack에서 Compose 버전 3은 이제 3.x(최신)와 동일합니다. docker/cli#3445
  • Windows에서 비대화형 모드로 컨테이너를 실행한 후 <Ctrl-c>를 눌러도 종료되지 않던 문제를 수정했습니다. docker/cli#3302
  • -v/--volume-m/--mount 플래그의 run 명령에 상대 소스 경로를 지원합니다. docker/cli#3469
  • docker exec -t가 실행 프로세스 생성 시 콘솔 크기를 즉시 설정합니다. docker/cli#3627
  • docker info의 pretty-print 형식을 업데이트하여 설치된 플러그인에 대한 자세한 정보를 제공합니다. docker/cli#3645
  • 환경 변수로 컨텍스트가 재정의되었을 때 docker context listdocker context use 명령에서 경고 메시지를 출력합니다. docker/cli#3668
  • 명령에 사용 가능한 모든 별칭을 출력하는 데 사용할 수 있는 사용자 지정 aliases 주석이 추가되었습니다. docker/cli#3694
  • docker context use로 현재 컨텍스트를 선택할 때 CLI가 더 이상 CLI 설정 파일을 생성하거나 업데이트하지 않습니다. docker/cli#3721
  • docker context rm --force 실행 시 존재하지 않는 컨텍스트는 이제 무시됩니다. docker/cli#3791
  • Compose 파일에서 정수를 0으로 재정의하는 기능이 추가되었습니다. docker/cli#3812
  • SIGINT(<Ctrl-c>)가 이제 CLI를 종료하는 대신 실행 중인 컨테이너로 전달됩니다. docker/cli#3849
  • docker port CONTAINER의 UX가 개선되어 포트를 출력 전에 정렬합니다. docker/cli#3892
  • API: API 버전 >= 1.42에서 GET /containers/{id}/logsPOST /containers/{id}/attachContent-type 응답 헤더로 사용 중인 raw-stream 형식을 보고합니다. moby/moby#39812
  • Windows 레이어의 기본 샌드박스 크기를 127GB로 설정하고, --storage-opts 플래그가 Windows의 모든 스토리지에 적용되도록 했습니다. moby/moby#41636
  • containerd 설정 파일(/var/run/docker/containerd/containerd.toml)에서 플러그인 섹션을 제거했습니다. moby/moby#41675
  • tar 가져오기 중 null 매니페스트를 거부합니다. moby/moby#41842
  • 플러그인용 사용자 지정 런타임에 shim 설정이 추가되었습니다. moby/moby#41854
  • 데몬이 재시작되면 컨테이너 상태 확인(health check)이 재개됩니다. moby/moby#41935
  • btrfs 드라이버 정리 시 할당량(quota)이 더 이상 비활성화되지 않습니다. moby/moby#42273
  • 접근 가능한 호스트 장치를 --privileged rootless 컨테이너에 마운트할 수 있습니다. moby/moby#42638
  • .dockerignore에서 **/foo 재귀 와일드카드 디렉터리 패턴의 잘못된 처리를 수정했습니다. moby/moby#42676
  • docker import --platform을 확장하여 가져온 이미지를 외부 아키텍처로 표시할 수 있습니다. moby/moby#43103
  • CPU 실시간 옵션 검증이 각 컨테이너별로 수행되는 대신 데몬 시작 시 수행되어 시작 실패를 조기에 감지할 수 있습니다. moby/moby#43131
  • namesgenerator 패키지를 새 추가 사항에 대해 동결했습니다. 기존 25359개의 형용사-이름 조합으로 만족해야 합니다. moby/moby#43210
  • API: API 버전 >= 1.42에서 containers/{id}/attach/wsstdin, stdout, stderr 파라미터에 따라 스트림만 처리합니다. moby/moby#43322
  • 지속적인 트래픽 하에서 컨테이너 재시작 후 UDP 트래픽이 동작하지 않던 문제를 수정했습니다. moby/moby#43409
  • Go, GCC, LLVM 및 기타 컴파일러 도구의 최신 버전에서 지원하는 사용자 지정 amd64 마이크로아키텍처 기능 레벨로 이미지를 pull하는 기능이 추가되었습니다. moby/moby#43434
  • API에서 잘못된 JSON 요청에 대한 검증이 개선되었습니다. moby/moby#43463
  • 상태 확인에 대한 느린 exec 시작의 영향을 완화했습니다. 이제 확인 제한 시간은 상태 확인 명령이 실행되는 시간에만 적용됩니다. 명령 시작에 걸리는 시간은 더 이상 제한 시간에 포함되지 않습니다. moby/moby#43480
  • 콘솔 tty 크기가 생성 시 즉시 설정됩니다. moby/moby#43593, moby/moby#43622
  • 컨테이너 시작 실패 또는 데몬 종료 후 overlay2 마운트가 정리되지 않던 문제를 수정했습니다. moby/moby#43659
  • 매니페스트 목록 해석을 containerd와 일치시켰습니다. moby/moby#43675
  • 데몬이 rootless 모드로 실행 중일 때 네트워킹에 firewalld를 사용하지 않도록 했습니다. moby/moby#43813
  • Windows에서 데몬 재시작 후 사용자 지정 NAT 네트워크가 없으면 다시 생성됩니다. moby/moby#43858
  • 컨테이너 상태 확인 프로세스가 시간 초과 시 종료되지 않던 문제를 수정했습니다. moby/moby#43994
  • 재시작 정책 및 볼륨 참조가 있는 live-restore를 수정했습니다. moby/moby#44237
  • API: API 버전 >= v1.42에서 기본적으로 익명 볼륨만 프루닝됩니다. 명명된 볼륨도 프루닝하려면 all=true 필터를 전달하세요. moby/moby#44259
  • API: GET /system/df 엔드포인트에서 동시 호출을 지원합니다. moby/moby#42715
  • SIGQUIT 수신 시 데몬이 스택을 덤프하고 코드 2로 종료하는 동작의 신뢰성을 개선했습니다. moby/moby#44831
  • Windows에서 docker logs -f의 신뢰성을 개선하고, local 로그 드라이버에서 개행 문자가 누락되지 않도록 했습니다. moby/moby#43294
  • 컨테이너 로그 버퍼링으로 인해 데몬에서 드물게 발생하던 교착 상태(deadlock)를 수정했습니다. moby/moby#44856
  • 기타 파일시스템 작업의 오류 처리를 개선하여 데몬이 overlayfs 백킹 파일시스템에서 시작할 수 있습니다. moby/moby#44834
  • 데몬이 rootless 모드일 때 --ipc=host가 올바르게 처리되지 않던 문제를 수정했습니다. moby/moby#44863
  • 오래된 conntrack 항목으로 인해 컨테이너의 UDP 트래픽 라우팅이 잘못되던 오랜 기간의 문제를 수정했습니다. moby/moby#44752
  • API에 절반만 등록된 컨테이너가 나열되던 문제와, 부분적으로 등록된 컨테이너를 API 호출에 사용할 때 발생하던 nil 포인터 역참조 및 패닉을 수정했습니다. moby/moby#44633
  • DOCKER-USER ip6tables 체인 생성 실패 문제를 수정했습니다. moby/moby#44845
  • ip6tables 명령을 사용할 수 없을 때 iptables 규칙 정리 실패 문제를 수정했습니다. moby/moby#44727
  • userland 프록시 활성화 후 일부 iptables NAT 규칙이 정리되지 않던 문제를 수정했습니다. moby/moby#44811
  • 컨테이너 시작 실패 시 정리를 잘못 처리하여 드물게 프로세스가 누출되던 문제를 수정했습니다. moby/moby#44400
  • 볼륨의 CreatedAt 시간이 생성 시점이 아닌 초기화 시점을 반영하던 문제를 수정했습니다. moby/moby#44725
  • 일부 명령에서 CLI가 도달할 수 없는 서버를 호환되지 않는 서버로 잘못 보고하던 문제를 수정했습니다. docker/cli#3901, docker/cli#3904
  • Zsh에서 볼륨 자동 완성이 깨지던 문제를 수정했습니다. docker/cli#2998
  • 잘못된 컨텍스트가 있을 때 docker context의 출력을 개선했습니다. docker/cli#3847
  • 출력이 TTY가 아닐 때 CLI 도움말 주석의 ANSI 장식을 제거하고 가독성을 위해 개행을 추가했습니다. docker/cli#3973
  • docker container rm의 별칭으로 docker container remove가 추가되었습니다. docker/cli#3986

알려진 이슈

apparmor_parser (추적 이슈)

일부 Debian 사용자가 23.0 브랜치로 업그레이드한 후 컨테이너 시작 실패를 보고했습니다. 오류 메시지는 apparmor_parser 바이너리 누락 때문임을 나타냅니다:

Error response from daemon: AppArmor enabled on system but the docker-default profile could not be loaded: running `apparmor_parser apparmor_parser --version` failed with output:
error: exec: "apparmor_parser": executable file not found in $PATH
Error: failed to start containers: somecontainer

이 문제의 해결 방법은 apparmor 패키지를 수동으로 설치하는 것입니다:

apt-get install apparmor

BuildKit 인라인 캐시 (추적 이슈)

BuildKit의 인라인 캐시 기능으로 이미지를 빌드하려고 하면(예: docker build --build-arg BUILDKIT_INLINE_CACHE=1 ., docker buildx build --cache-to type=inline .) 데몬이 예기치 않게 종료됩니다:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x147ff00]

goroutine 693 [running]:
github.com/docker/docker/vendor/github.com/moby/buildkit/cache.computeBlobChain.func4.1({0x245cca8, 0x4001394960})
 /go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/cache/blobs.go:206 +0xc90
github.com/docker/docker/vendor/github.com/moby/buildkit/util/flightcontrol.(*call).run(0x40013c2240)
 /go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/flightcontrol/flightcontrol.go:121 +0x64
sync.(*Once).doSlow(0x0?, 0x4001328240?)
 /usr/local/go/src/sync/once.go:74 +0x100
sync.(*Once).Do(0x4001328240?, 0x0?)
 /usr/local/go/src/sync/once.go:65 +0x24
created by github.com/docker/docker/vendor/github.com/moby/buildkit/util/flightcontrol.(*call).wait

이런 크래시 후 데몬은 systemd 등을 통해 재시작하도록 구성된 경우 재시작됩니다. 이 릴리스에서 가능한 유일한 완화 방법은 인라인 캐시 기능을 활성화한 빌드를 수행하지 않는 것입니다.

웜 캐시를 사용하는 BuildKit (추적 이슈)

이전 버전의 데몬에서 BuildKit으로 빌드된 이미지를 23.0 데몬으로 빌드하면 이전에 캐시된 레이어가 올바르게 복원되지 않습니다. Dockerfile의 줄이 변경되지 않으면 이미지가 올바르게 빌드되는 것처럼 보일 수 있습니다. 그러나 Dockerfile의 일부 줄을 변경하여 부분적인 캐시 무효화가 발생하면 여전히 유효하고 이전에 캐시된 레이어가 올바르게 로드되지 않습니다.

이 문제는 Dockerfile의 일부 줄을 변경한 후 RUN 단계나 파일을 참조하는 다른 단계에서 이미지에 있어야 할 파일이 없는 형태로 가장 자주 나타납니다:

[+] Building 0.4s (6/6) FINISHED
 => [internal] load build definition from Dockerfile
 => => transferring dockerfile: 102B
 => [internal] load .dockerignore
 => => transferring context: 2B
 => [internal] load metadata for docker.io/library/node:18-alpine
 => [base 1/2] FROM docker.io/library/node:18-alpine@sha256:bc329c7332cffc30c2d4801e38df03cbfa8dcbae2a7a52a449db104794f168a3
 => CACHED [base 2/2] WORKDIR /app
 => ERROR [stage-1 1/1] RUN uname -a
------
 > [stage-1 1/1] RUN uname -a:
#0 0.138 runc run failed: unable to start container process: exec: "/bin/sh": stat /bin/sh: no such file or directory
------
Dockerfile:5
--------------------
 3 |
 4 | FROM base
 5 | >>> RUN uname -a
 6 |
--------------------
ERROR: failed to solve: process "/bin/sh -c uname -a" did not complete successfully: exit code: 1

이 문제를 완화하려면 이전 빌드 캐시를 폐기해야 합니다. docker builder prune -a는 빌드 캐시를 완전히 비우고, 잘못 처리된 캐시 레이어를 제거하여 영향을 받는 빌드가 다시 진행되도록 합니다.

ipvlan 네트워크 (추적 이슈)

23.0 브랜치로 업그레이드할 때 ipvlan 네트워크가 하나라도 존재하면 데몬이 시작되지 않습니다:

panic: interface conversion: interface {} is nil, not string

goroutine 1 [running]:
github.com/docker/docker/libnetwork/drivers/ipvlan.(*configuration).UnmarshalJSON(0x40011533b0, {0x400069c2d0, 0xef, 0xef})
 /go/src/github.com/docker/docker/libnetwork/drivers/ipvlan/ipvlan_store.go:196 +0x414
encoding/json.(*decodeState).object(0x4001153440, {0x5597157640?, 0x40011533b0?, 0x559524115c?})
 /usr/local/go/src/encoding/json/decode.go:613 +0x650
encoding/json.(*decodeState).value(0x4001153440, {0x5597157640?, 0x40011533b0?, 0x559524005c?})
 /usr/local/go/src/encoding/json/decode.go:374 +0x40
encoding/json.(*decodeState).unmarshal(0x4001153440, {0x5597157640?, 0x40011533b0?})
 /usr/local/go/src/encoding/json/decode.go:181 +0x204
encoding/json.Unmarshal({0x400069c2d0, 0xef, 0xef}, {0x5597157640, 0x40011533b0})
 /usr/local/go/src/encoding/json/decode.go:108 +0xf4
github.com/docker/docker/libnetwork/drivers/ipvlan.(*configuration).SetValue(0x4000d18050?, {0x400069c2d0?, 0x23?, 0x23?})
 /go/src/github.com/docker/docker/libnetwork/drivers/ipvlan/ipvlan_store.go:230 +0x38

이 문제를 완화하려면 영향을 받는 사용자는 다운그레이드하여 네트워크를 제거한 후 다시 업그레이드할 수 있습니다. 또는 전체 네트워크 저장소를 제거하고 업그레이드 후 네트워크를 다시 생성할 수 있습니다. 네트워크 저장소는 /var/lib/docker/network/files/local-kv.db에 있습니다. 데몬이 대체 --data-root를 사용하는 경우 /var/lib/docker를 해당 경로로 바꾸면 됩니다.

Kata Containers (추적 이슈)

23.0 브랜치는 io.containerd.runsc.v1(gVisor) 및 io.containerd.kata.v2(Kata Containers) 같은 대체 containerd shim을 지원합니다.

Kata Containers 런타임을 사용할 때 exec 세션을 종료하면 실행 중인 컨테이너가 중지되고, TTY가 열려 있으면 연결된 CLI가 멈춥니다. 현재로서는 Kata 런타임에서 실행 중인 컨테이너에 exec를 사용하지 않는 것 외에는 완화 방법이 없습니다.

이 문제의 근본 원인은 Moby의 오랜 버그입니다. 향후 릴리스에서 해결될 예정입니다. 대체 OCI 런타임 지원은 새로운 기능이므로 더 많은 사용자가 이 기능을 사용하면서 유사한 문제가 발견될 수 있음을 유의하시기 바랍니다.

더 알아보기 (Learn more)