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의 최신 변경 사항, 추가 기능, 알려진 이슈, 수정 사항을 다룹니다. 추가로 다음 문서도 참고하시면 좋습니다:
- Deprecated되거나 제거된 기능: Deprecated Engine Features
- Engine API 변경 사항: Engine API version history
23.0.0 릴리스부터 Docker Engine은 CalVer 버전 체계를 사용하지 않고 SemVer 버전 체계를 사용합니다. 이는 향후 Go 모듈 호환성을 위한 준비 단계이지만, 아직 저장소가 Go 모듈을 사용하지는 않으므로 +incompatible 버전을 계속 사용해야 합니다. Go 모듈 호환성 작업은 향후 릴리스에서 계속 진행될 예정입니다.
23.0.6 (2023-05-08)
이 릴리스의 전체 PR과 변경 사항은 GitHub 마일스톤에서 확인할 수 있습니다:
버그 수정 및 개선
- NFS 환경에서 vfs 스토리지 드라이버가 동작하지 않던 문제를 수정했습니다. moby/moby#45465
패키징 업데이트
- Go를
1.19.9로 업그레이드했습니다. docker/docker-ce-packaging#889, docker/cli#4254, moby/moby#45455 containerd를 v1.6.21로 업그레이드했습니다.runc를 v1.1.7로 업그레이드했습니다.
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
패키징 업데이트
- Compose를
2.17.3으로 업그레이드했습니다. docker/docker-ce-packaging#883
23.0.4 (2023-04-17)
이 릴리스의 전체 PR과 변경 사항은 GitHub 마일스톤에서 확인할 수 있습니다:
버그 수정 및 개선
- Docker CLI 23.0.0에서 발생한 성능 저하 문제를 수정했습니다. docker/cli#4141
docker cp의 진행 표시줄이 의도대로 동작하지 않던 문제를 수정했습니다. docker/cli#4157docker compose --file의 셸 자동 완성이 동작하지 않던 문제를 수정했습니다. docker/cli#4177daemon.json에서default-address-pools를 잘못 처리하여 발생하던 오류를 수정했습니다. moby/moby#45246
패키징 업데이트
- CentOS 9 Stream용 패키지가 누락된 문제를 수정했습니다.
- Go를
1.19.8로 업그레이드했습니다. docker/docker-ce-packaging#878, docker/cli#4164, moby/moby#45277 - 이 Go 업그레이드에는 다음 CVE 수정이 포함되어 있습니다: CVE-2023-24537, CVE-2023-24538, CVE-2023-24534, CVE-2023-24536
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를 검토하여 의도치 않은 노출이 없었는지 확인하시기 바랍니다.
패키징 업데이트
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
패키징
- Go를
1.19.7로 업그레이드했습니다. docker/docker-ce-packaging#857, docker/cli#4086, moby/moby#45137 containerd를v1.6.19로 업그레이드했습니다. moby/moby#45084, moby/moby#45099- Buildx를
v0.10.4로 업그레이드했습니다. docker/docker-ce-packaging#855 - Compose를
v2.17.2로 업그레이드했습니다. docker/docker-ce-packaging#867
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 build가docker 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
runhcsshim을 지원합니다(기본적으로 비활성화). 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설정과l3sipvlan_mode를 지원합니다. moby/moby#42542overlay2스토리지 드라이버의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#2907docker stack config명령이 추가되어stack deploy에서 사용하는 병합 및 보간된 설정 파일을 출력할 수 있습니다. docker/cli#3544- 현재 컨텍스트 이름을 출력하는
docker context show명령이 추가되었습니다. docker/cli#3567 --format플래그를 지원하는 모든 명령에--format="{{ json . }}"의 축약형인--format=json이 추가되었습니다. docker/cli#2936docker create와docker run에 이미지 pull 시 출력을 억제하는--quiet옵션이 추가되었습니다. docker/cli#3377docker network rm하위 명령에--force옵션이 추가되었습니다. 네트워크가 존재하지 않아도 CLI가 0 종료 코드를 반환합니다. 서버 측 네트워크 제거 절차에는 영향을 주지 않습니다. docker/cli#3547docker stop과docker restart에--signal옵션이 추가되었습니다. docker/cli#3614docker-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#43369awslogs로그 드라이버에 CloudWatch에서 로그 스트림 생성을 건너뛰는 새 옵션이 추가되었습니다. moby/moby#42132awslogs로그 드라이버에 CloudWatch로 전송할 로그 형식을 지정하는 새 옵션이 추가되었습니다. moby/moby#42838fluentd로그 드라이버에 재연결 간격을 설정하는 새 옵션이 추가되었습니다. moby/moby#43100- Go API 클라이언트에 새 옵션 세터가 추가되었습니다:
WithTLSClientConfigFromEnv(),WithHostFromEnv(),WithVersionFromEnv(). moby/moby#42224 docker completion하위 명령을 통해 셸 명령 자동 완성을 생성할 수 있습니다. docker/cli#3429- API:
GET /_ping과HEAD /_ping에Swarm헤더가 추가되어 단일 요청으로 Swarm 지원 여부를 감지할 수 있습니다. moby/moby#42064 - API:
POST /containers/{id}/stop과POST /containers/{id}/restart에 사용할 시그널을 지정하는signal파라미터가 추가되었습니다. moby/moby#43206 - API:
POST /containers/create에CreateMountPoint파라미터가 추가되었습니다. 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.service가time-set.target이후에 시작됩니다. moby/moby#43107
제거된 기능
~/.dockercfg에서 설정을 읽는 지원이 제거되었습니다. docker/cli#2504- 이 위치는 1.7.0부터 deprecated되었습니다.
- Deprecation 공지
-g및--graph데몬 옵션이 제거되었습니다.--data-root를 사용하세요. docker/cli#3739- 이 옵션들은 17.05부터 숨겨지고 deprecated되었습니다.
- Deprecation 공지
- 클라이언트 측 결과 정렬이 제거되었습니다. 검색 API가 반환하는 순서를 그대로 사용합니다. docker/cli#3470
- CLI에서 deprecated 스토리지 드라이버 관련 경고가 제거되었습니다. 이제 경고는 데몬이 처리합니다. docker/cli#3542
docker version에서Experimental클라이언트 필드가 제거되었습니다. docker/cli#3543- deprecated 스토리지 드라이버를 사용하려면 명시적인 동의가 필요하며, 업그레이드 시 자동으로 선택되지 않습니다. moby/moby#43378
d_type을 지원하지 않는 백킹 파일시스템에서overlay및overlay2스토리지 드라이버에 대한 deprecated 지원이 제거되었습니다. moby/moby#43472overlay2스토리지 드라이버에서 deprecated된overrideKernelCheck옵션이 제거되었습니다. moby/moby#44279- deprecated된
io.containerd.runtime.v1.linuxOCI 런타임 지원이 제거되었습니다. 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에서 사용되던 레거시 오버레이 네트워크 관련 데몬 옵션이 제거되었습니다.
dockerd의--cluster-xx옵션이 제거되었습니다. moby/moby#40383- 외부 k/v 저장소를 사용하는
host-discovery및 오버레이 네트워크가 제거되었습니다. moby/moby#42247 - Deprecation 공지
- 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#44022WithDialContext()를 대신 사용하세요.
- 데몬의
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
업그레이드
- Go를
1.19.5로 업그레이드했습니다. docker/cli#3958, moby/moby#44794 rootlesskit를v0.14.4로 업그레이드했습니다. moby/moby#42708buildkit을v0.10.6으로 업그레이드했습니다. moby/moby#43239buildx를v0.10.2로 업그레이드했습니다. docker/docker-ce-packaging#840swarmkit을v2.0.0-20230119195359-904c221ac281로 업그레이드했습니다. moby/moby#44858containerd를v1.6.16으로 업그레이드했습니다. moby/moby#44766, moby/moby#44769, moby/moby#44881runc를v1.1.4로 업그레이드했습니다. moby/moby#44039hcsshim을v0.9.6으로 업그레이드했습니다. moby/moby#44658btrfs스토리지 드라이버가 이제 btrfs-progs의 헤더 대신 Linux 커널 헤더(>= 4.12)에 의존합니다. moby/moby#44776
보안
- 컨테이너
hostconfig.json파일의 권한이0644에서0600으로 변경되었습니다. moby/moby#41620 --seccomp-profile이unconfined를 허용하지 않던 문제를 수정하고, 기본 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_readv와process_vm_writev를 다시 활성화했습니다. moby/moby#42083 - 기본 seccomp 프로필에 PKU 관련 syscall을 추가했습니다. moby/moby#43812
CAP_SYS_TIME이 있으면clock_settime64를 허용합니다. moby/moby#43775CAP_BPF가 있으면bpf를,CAP_PERFMON이 있으면perf_event_open을 허용합니다. moby/moby#43988- 기본 seccomp 프로필에서
clone3syscall이ENOSYS를 반환하도록 명시적으로 설정하여glibc가clone으로 올바르게 폴백하도록 했습니다. moby/moby#42681
버그 수정 및 개선
overlay2가 기본 스토리지 드라이버로 승격되었습니다(btrfs와zfs는 이제 옵트인 방식). moby/moby#42661docker cp명령에 로딩 스피너가 추가되었습니다. docker/cli#2708ElectAuthServer함수가 deprecated되고,GET /infoAPI 엔드포인트를 호출하지 않고 기본 레지스트리를 반환하도록 변경되었습니다. 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#3245docker stack에 Compose 스키마3.10이 추가되었고,version필드를 생략할 수 있습니다(latest로 간주). docker/cli#3257docker stack에서 Compose 버전3은 이제3.x(최신)와 동일합니다. docker/cli#3445- Windows에서 비대화형 모드로 컨테이너를 실행한 후
<Ctrl-c>를 눌러도 종료되지 않던 문제를 수정했습니다. docker/cli#3302 -v/--volume및-m/--mount플래그의run명령에 상대 소스 경로를 지원합니다. docker/cli#3469docker exec -t가 실행 프로세스 생성 시 콘솔 크기를 즉시 설정합니다. docker/cli#3627docker info의 pretty-print 형식을 업데이트하여 설치된 플러그인에 대한 자세한 정보를 제공합니다. docker/cli#3645- 환경 변수로 컨텍스트가 재정의되었을 때
docker context list및docker context use명령에서 경고 메시지를 출력합니다. docker/cli#3668 - 명령에 사용 가능한 모든 별칭을 출력하는 데 사용할 수 있는 사용자 지정
aliases주석이 추가되었습니다. docker/cli#3694 docker context use로 현재 컨텍스트를 선택할 때 CLI가 더 이상 CLI 설정 파일을 생성하거나 업데이트하지 않습니다. docker/cli#3721docker 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}/logs와POST /containers/{id}/attach가Content-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- 접근 가능한 호스트 장치를
--privilegedrootless 컨테이너에 마운트할 수 있습니다. moby/moby#42638 .dockerignore에서**/foo재귀 와일드카드 디렉터리 패턴의 잘못된 처리를 수정했습니다. moby/moby#42676docker import --platform을 확장하여 가져온 이미지를 외부 아키텍처로 표시할 수 있습니다. moby/moby#43103- CPU 실시간 옵션 검증이 각 컨테이너별로 수행되는 대신 데몬 시작 시 수행되어 시작 실패를 조기에 감지할 수 있습니다. moby/moby#43131
namesgenerator패키지를 새 추가 사항에 대해 동결했습니다. 기존 25359개의 형용사-이름 조합으로 만족해야 합니다. moby/moby#43210- API: API 버전 >= 1.42에서
containers/{id}/attach/ws가stdin,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-USERip6tables 체인 생성 실패 문제를 수정했습니다. moby/moby#44845ip6tables명령을 사용할 수 없을 때 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 런타임 지원은 새로운 기능이므로 더 많은 사용자가 이 기능을 사용하면서 유사한 문제가 발견될 수 있음을 유의하시기 바랍니다.