Docker Engine 28 릴리스 노트
Docker Engine 28 릴리스 노트
Docker Engine 28 버전에서 어떤 변화가 있었는지, 새로 추가된 기능과 수정된 버그, 알려진 이슈까지 한자리에 모아봤어요. 각 버전별로 어떤 작업이 이루어졌는지 차근차근 살펴보도록 할게요. 참고로 폐기 예정이거나 이미 제거된 기능에 대한 자세한 내용은 별도 문서에서 확인할 수 있으니 필요할 때 찾아보시면 됩니다.
출처: 공식문서
본문
28.5.2
2025-11-05
이번 패치 릴리스에서 어떤 PR과 변경사항이 있었는지 GitHub 마일스톤에서 확인할 수 있어요.
⚠️ 주의
이번 릴리스에는 runc의 심각도 높은 보안 취약점 3건에 대한 수정이 포함되어 있어요:
세 취약점 모두 서로 다른 방법으로 runc의 임의
/proc파일 쓰기 제한을 우회해서 컨테이너를 완전히 탈출할 수 있게 만드는 문제였어요.
버그 수정 및 개선
dockerd-rootless.sh: slirp4netns가 설치되어 있지 않으면 pasta(passt)를 사용하도록 시도해요. moby/moby#51162
패키징 업데이트
- BuildKit을 v0.25.2로 업데이트했어요. moby/moby#51398
- Go 런타임을 1.24.9로 업데이트했어요. moby/moby#51387, docker/cli#6613
- runc를 v1.3.3로 업데이트했어요. moby/moby#51394
폐기 예정 사항
- Go-SDK:
cli/command/image/build패키지에서DefaultDockerfileName,DetectArchiveReader,WriteTempDockerfile,ResolveAndValidateContextPath가 폐기 예정이에요. 이 유틸리티들은 내부적으로만 사용됐고 다음 릴리스에서 제거될 예정이에요. docker/cli#6610 - Go-SDK:
cli/command/image/build패키지의IsArchive유틸리티가 폐기 예정이에요. docker/cli#6560 - Go-SDK:
opts패키지의ValidateMACAddress가 폐기 예정이에요. docker/cli#6560 - Go-SDK:
opts패키지의ListOpts.Delete()가 폐기 예정이에요. docker/cli#6560
28.5.1
2025-10-08
이번 패치 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.
버그 수정 및 개선
- BuildKit을 v0.25.1로 업데이트했어요. moby/moby#51137
- Go 런타임을 1.24.8로 업데이트했어요. moby/moby#51133, docker/cli#6541
폐기 예정 사항
api/types/image패키지:InspectResponse의Parent와DockerVersion필드가 폐기 예정이에요. moby/moby#51105api/types/plugin패키지:Config.DockerVersion필드가 폐기 예정이에요. moby/moby#51110
28.5.0
2025-10-02
이번 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.
⚠️ 경고
Raspberry Pi OS 32-bit(armhf) 지원 중단 예고
Docker Engine v28이 Raspberry Pi OS 32-bit(armhf)를 지원하는 마지막 메이저 버전이 될 예정이에요. Docker Engine v29부터는 Raspberry Pi OS 32-bit(armhf)용 패키지를 더 이상 제공하지 않아요.
마이그레이션 옵션
- 64-bit ARM: Debian
arm64패키지를 설치하면 완전히 지원돼요. - 32-bit ARM(v7): Debian
armhf패키지를 설치하면 ARMv7 CPU를 대상으로 해요.
참고: ARMv6 아키텍처 기반의 구형 기기는 공식 패키지에서 더 이상 지원되지 않아요. 여기에는 다음 기기들이 포함돼요:
- Raspberry Pi 1 (Model A/B/A+/B+)
- Raspberry Pi Zero 및 Zero W
버그 수정 및 개선
- CLI 플러그인 디렉터리의 깨진 심볼릭 링크 때문에
docker info에서 경고가 출력되던 문제를 수정했어요. docker/cli#6476 - 빈 이벤트
Actor.ID에 대해stats실행 중 발생하던 패닉을 수정했어요. docker/cli#6471
패키징 업데이트
- 레거시 CBC 암호화 스위트 지원을 제거했어요. docker/cli#6474
- BuildKit을 v0.25.0으로 업데이트했어요. moby/moby#51075
- Dockerfile 문법을 v1.19.0으로 업데이트했어요. moby/moby#51075
네트워킹
- 데이터 스토어에서
endpoint_count삭제 시 발생하던 무해한 경고를 제거했어요. moby/moby#51064 - Windows에서 IPAM 플러그인이 로드되지 않던 버그를 수정했어요. moby/moby#51035
API
- 커널 메모리 TCP 어카운팅(
KernelMemoryTCP) 지원을 폐기 예정으로 처리했어요. moby/moby#51067 - 체크포인트가 없을 때
GET containers/{name}/checkpoints가 빈 JSON 배열 대신null을 반환하던 문제를 수정했어요. moby/moby#51052
Go SDK
cli-plugins/plugin패키지:Run에서 CLI를 커스터마이즈할 수 있게 됐어요. docker/cli#6481cli/command패키지:WithUserAgent옵션이 추가됐어요. docker/cli#6477
폐기 예정 사항
- Go-SDK:
cli/command패키지의DockerCli.Apply가 폐기 예정이에요. 더 이상 사용되지 않으며 남은 사용처가 없으면 다음 릴리스에서 제거될 예정이에요. docker/cli#6497 - Go-SDK:
cli/command패키지의DockerCli.ContentTrustEnabled가 폐기 예정이에요. 더 이상 사용되지 않으며 다음 릴리스에서 제거될 예정이에요. docker/cli#6495 - Go-SDK:
cli/command패키지의DockerCli.DefaultVersion이 폐기 예정이에요. 더 이상 사용되지 않으며 다음 릴리스에서 제거될 예정이에요. docker/cli#6491 - Go-SDK:
cli/command패키지의ResolveDefaultContext유틸리티가 폐기 예정이에요. docker/cli#6529 - Go-SDK:
cli/command패키지의WithContentTrustFromEnv,WithContentTrust옵션이 폐기 예정이에요. 이 옵션들은 내부적으로 사용됐고 다음 릴리스에서 제거될 예정이에요. docker/cli#6489 - Go-SDK:
cli/manifest/store패키지의IsNotFound()가 폐기 예정이에요. docker/cli#6514 - Go-SDK:
templates패키지의NewParse()함수가 폐기 예정이에요. docker/cli#6469
28.4.0
2025-09-03
이번 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.
새로운 기능
- docker 컨텍스트 메타데이터에 키-값 쌍(
"GODEBUG":"...")이 있으면 Docker CLI가GODEBUG환경 변수를 설정할 수 있게 됐어요. docker/cli#6399
버그 수정 및 개선
docker pull과docker image pull에 셸 완성 기능을 추가했어요. docker/cli#6420- v28.3.3에서 클라이언트가
X-Registry-Auth헤더를 보내지 않을 때docker push중 패닉이 발생할 수 있던 회귀 문제를 수정했어요. moby/moby#50738 - Windows: 이미지 풀링 시 "access denied" 오류가 발생하던 문제를 잠재적으로 수정했어요. moby/moby#50871
- containerd 이미지 스토어: 로컬에서 빌드된 비네이티브 이미지에 대해
docker history가snapshot X does not exist오류로 실패하던 문제를 수정했어요. moby/moby#50875 - containerd 이미지 스토어:
docker image prune이 올바른untag및delete이벤트를 발생시키고, 모든 blob 대신 삭제된 이미지의 루트 다이제스트만 나열하도록 수정했어요. moby/moby#50837 - 인증 누락으로 실패한 후
docker push와docker pull에서 대화형 로그인 프롬프트를 제거했어요. docker/cli#6256
패키징 업데이트
- BuildKit을 v0.24.0으로 업데이트했어요. moby#50888
- Go 런타임을 1.24.7로 업데이트했어요. moby/moby#50889, docker/cli#6422
runc를 v1.3.0으로 업데이트했어요. moby/moby#50699- containerd(정적 바이너리만)를 v1.7.28로 업데이트했어요. moby/moby#50700
네트워킹
- live-restore 시 컨테이너 재시작이 느려질 수 있던 문제를 수정했어요. moby/moby#50829
API
AuthConfig.Email필드의 폐기 예정 메시지를 업데이트했어요. moby/moby#50797
Go SDK
- github.com/moby/profiles로 마이그레이션된 profiles 패키지를 폐기 예정으로 처리했어요. moby/moby#50513
폐기 예정 사항
--tlscacert,--tlscert,--tlskey커맨드라인 플래그의 따옴표 처리 특별 지원을 폐기 예정으로 처리했어요. docker/cli#6291- 레거시 링크 환경 변수(
DOCKER_KEEP_DEPRECATED_LEGACY_LINKS_ENV_VARS)를 v28.4에서 폐기 예정으로 표시하고 v30.0에서 제거 예정으로 설정했어요. docker/cli#6309 - Go-SDK:
NetworkSettingsBase.Bridge필드,NetworkSettingsBase구조체,DefaultNetworkSettings의 모든 필드,DefaultNetworkSettings구조체를 폐기 예정으로 처리했어요. moby/moby#50839 - Go-SDK:
api/types패키지의build.CacheDiskUsage,container.DiskUsage,images.DiskUsage,volumes.DiskUsage가 폐기 예정이며 다음 메이저 릴리스에서 제거될 예정이에요. moby/moby#50768 - Go-SDK:
cli-plugins/manager패키지의ReexecEnvvar가 폐기 예정이에요. docker/cli#6411 - Go-SDK:
cli-plugins/manager패키지의 어노테이션 별칭(CommandAnnotationPlugin,CommandAnnotationPluginVendor,CommandAnnotationPluginVersion,CommandAnnotationPluginInvalid,CommandAnnotationPluginCommandPath)이 폐기 예정이며,cli-plugins/manager/metadata의 동등한 항목을 사용해야 해요. docker/cli#6298 - Go-SDK:
cli-plugins/manager패키지의 메타데이터 별칭(NamePrefix,MetadataSubcommandName,HookSubcommandName,Metadata,ReexecEnvvar)이 폐기 예정이며,cli-plugins/manager/metadata의 동등한 항목을 사용해야 해요. docker/cli#6269 - Go-SDK:
cli-plugins/manager패키지에서 내부 전용이었던Candidate인터페이스를 제거했어요. docker/cli#6269 - Go-SDK:
cli-plugins/manager패키지에서 내부 전용이었던NewPluginError함수를 제거했어요. docker/cli#6269 - Go-SDK:
cli-plugins/manager패키지에서 폐기 예정이었던ResourceAttributesEnvvar상수를 제거했어요. docker/cli#6269 - Go-SDK:
cli/command/builder패키지의NewBuilderCommand와NewBakeStubCommand가 폐기 예정이에요. 이 함수들은 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/builder패키지의NewPruneCommand가 폐기 예정이에요. docker/cli#6343 - Go-SDK:
cli/command/checkpoint패키지의NewCheckpointCommand가 폐기 예정이에요. 이 함수는 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/checkpoint패키지의NewFormat,FormatWrite가 폐기 예정이에요. docker/cli#6341 - Go-SDK:
cli/command/completion패키지의NoComplete가 폐기 예정이에요. docker/cli#6405 - Go-SDK:
cli/command/completion패키지에서 폐기 예정이었던ValidArgsFn을 제거했어요. docker/cli#6259 - Go-SDK:
cli/command/config패키지의NewConfigCommand가 폐기 예정이에요. 이 함수는 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/config패키지의NewFormat,FormatWrite,InspectFormatWrite가 폐기 예정이에요. docker/cli#6341 - Go-SDK:
cli/command/config패키지의RunConfigCreate,CreateOptions,RunConfigInspect,InspectOptions,RunConfigList,ListOptions,RunConfigRemove,RemoveOptions가 폐기 예정이에요. docker/cli#6369 - Go-SDK:
cli/command/container패키지의NewBuildCommand,NewPullCommand,NewPushCommand,NewImagesCommand,NewImageCommand,NewHistoryCommand,NewImportCommand,NewLoadCommand,NewRemoveCommand,NewSaveCommand,NewTagCommand,NewPruneCommand이 폐기 예정이에요. 이 함수들은 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/container패키지의NewDiffFormat,DiffFormatWrite가 폐기 예정이에요. 이 함수들은 내부적으로만 사용됐고 다음 릴리스에서 제거될 예정이에요. docker/cli#6341 - Go-SDK:
cli/command/container패키지의NewRunCommand,NewExecCommand,NewPsCommand,NewContainerCommand,NewAttachCommand,NewCommitCommand,NewCopyCommand,NewCreateCommand,NewDiffCommand,NewExportCommand,NewKillCommand,NewLogsCommand,NewPauseCommand,NewPortCommand,NewRenameCommand,NewRestartCommand,NewRmCommand,NewStartCommand,NewStatsCommand,NewStopCommand,NewTopCommand,NewUnpauseCommand,NewUpdateCommand,NewWaitCommand,NewPruneCommand이 폐기 예정이에요. 이 함수들은 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/context패키지의NewContextCommand가 폐기 예정이에요. 이 함수는 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/context패키지의RunCreate와CreateOptions가 폐기 예정이에요. docker/cli#6403 - Go-SDK:
cli/command/context패키지의RunExport와ExportOptions가 폐기 예정이에요. docker/cli#6403 - Go-SDK:
cli/command/context패키지의RunImport가 폐기 예정이에요. docker/cli#6403 - Go-SDK:
cli/command/context패키지의RunRemove와RemoveOptions가 폐기 예정이에요. docker/cli#6403 - Go-SDK:
cli/command/context패키지의RunUpdate와UpdateOptions가 폐기 예정이에요. docker/cli#6403 - Go-SDK:
cli/command/context패키지의RunUse가 폐기 예정이에요. docker/cli#6403 - Go-SDK:
cli/command/image패키지의AuthResolver유틸리티가 폐기 예정이에요. docker/cli#6357 - Go-SDK:
cli/command/image패키지의NewHistoryFormat,HistoryWrite가 폐기 예정이에요. docker/cli#6341, docker/cli#6341 - Go-SDK:
cli/command/manifest패키지의NewManifestCommand가 폐기 예정이에요. 이 함수는 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/network패키지의NewFormat,FormatWrite가 폐기 예정이에요. docker/cli#6341 - Go-SDK:
cli/command/network패키지의NewNetworkCommand가 폐기 예정이에요. 이 함수들은 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/node패키지의NewFormat,FormatWrite,InspectFormatWrite가 폐기 예정이에요. docker/cli#6341 - Go-SDK:
cli/command/node패키지의NewNodeCommand가 폐기 예정이에요. 이 함수들은 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/plugin패키지의NewFormat,FormatWrite가 폐기 예정이에요. docker/cli#6341 - Go-SDK:
cli/command/plugin패키지의NewPluginCommand가 폐기 예정이에요. 이 함수는 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/registry패키지의NewLoginCommand,NewLogoutCommand,NewSearchCommand가 폐기 예정이에요. 이 함수들은 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/registry패키지의NewSearchFormat,SearchWrite가 폐기 예정이에요. docker/cli#6341 - Go-SDK:
cli/command/registry패키지의OauthLoginEscapeHatchEnvVar상수가 폐기 예정이에요. docker/cli#6413 - Go-SDK:
cli/command/secret패키지의NewFormat,FormatWrite,InspectFormatWrite가 폐기 예정이에요. docker/cli#6341 - Go-SDK:
cli/command/secret패키지의NewSecretCommand가 폐기 예정이에요. 이 함수들은 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/service패키지의NewFormat,InspectFormatWrite가 폐기 예정이에요. docker/cli#6341 - Go-SDK:
cli/command/service패키지의NewServiceCommand가 폐기 예정이에요. 이 함수는 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/stack패키지의NewStackCommand가 폐기 예정이에요. 이 함수는 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/stack패키지의RunList,RunServices가 폐기 예정이에요. docker/cli#6391 - Go-SDK:
cli/command/swarm패키지의NewSwarmCommand가 폐기 예정이에요. 이 함수는 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/system패키지의NewVersionCommand,NewInfoCommand,NewSystemCommand,NewEventsCommand,NewInspectCommand가 폐기 예정이에요. 이 함수들은 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/task패키지의NewTaskFormat,FormatWrite가 폐기 예정이에요. docker/cli#6341 - Go-SDK:
cli/command/trust패키지의NewTrustCommand가 폐기 예정이에요. 이 함수는 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command/trust패키지의SignedTagInfo,SignerInfo,NewTrustTagFormat,NewSignerInfoFormat,TagWrite,SignerInfoWrite가 폐기 예정이에요. docker/cli#6341 - Go-SDK:
cli/command/volume패키지의NewVolumeCommand,NewPruneCommand가 폐기 예정이에요. 이 함수들은 다음 릴리스에서 제거될 예정이에요. docker/cli#6312 - Go-SDK:
cli/command패키지에서 내부 전용이었던AddTrustSigningFlags,AddTrustVerificationFlags,AddPlatformFlag유틸리티를 제거했어요. docker/cli#6311 - Go-SDK:
cli/command패키지에서 폐기 예정이었던ConfigureAuth유틸리티를 제거했어요. docker/cli#6257 - Go-SDK:
cli/command패키지에서 폐기 예정이었던CopyToFile유틸리티를 제거했어요. docker/cli#6257 - Go-SDK:
cli/config/types패키지의AuthConfig.Email필드 폐기 예정 메시지를 업데이트했어요. docker/cli#6392 - Go-SDK:
cli패키지의VisitAll,DisableFlagsInUseLine유틸리티가 폐기 예정이에요. 이 유틸리티들은 내부적으로만 사용됐고 다음 릴리스에서 제거될 예정이에요. docker/cli#6276 - Go-SDK:
cli패키지에서 내부 전용이었던HasCompletionArg유틸리티를 제거했어요. docker/cli#6276 - Go-SDK:
cli/command.RegistryAuthenticationPrivilegedFunc가 폐기 예정이에요. docker/cli#6256 - Go-SDK:
cli/command/stack/formatter가 폐기 예정이에요. docker/cli#6391 - Go-SDK:
cli/command/stack/loader가 폐기 예정이에요. docker/cli#6391 - Go-SDK:
cli/command/stack/options가 폐기 예정이에요. docker/cli#6391 - Go-SDK:
cli/command/stack/swarm이 폐기 예정이에요. docker/cli#6391 - Go-SDK:
opts패키지의NewNamedListOptsRef,NewNamedMapOpts,NamedListOpts,NamedMapOpts,NamedOption이 폐기 예정이에요. 이 타입과 함수는 더 이상 사용되지 않으며 다음 릴리스에서 제거될 예정이에요. docker/cli#6292 - Go-SDK:
opts패키지의ParseEnvFile가 폐기 예정이며kvfile.Parse를 사용해야 해요. docker/cli#6381 - Go-SDK:
opts패키지의QuotedString이 폐기 예정이에요. 더 이상 사용되지 않으며 다음 릴리스에서 제거될 예정이에요. docker/cli#6275 - Go-SDK:
opts패키지의ValidateHost유틸리티가 폐기 예정이에요. 더 이상 사용되지 않으며 다음 릴리스에서 제거될 예정이에요. docker/cli#6280 - Go-SDK:
pkg/jsonmessage패키지의JSONMessage.From,JSONMessage.Time,JSONMessage.TimeNano필드가 폐기 예정이에요. API가 진행 메시지에 대해 더 이상 이 필드들을 반환하지 않기 때문이에요./events응답을 언마샬링할 때는events.Message타입을 사용하세요. moby/moby#50762 - Go-SDK:
cli/registry/client패키지가 폐기 예정이며 다음 릴리스에서 제거될 예정이에요. docker/cli#6313
28.3.3
2025-07-29
이번 패치 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.
보안
이번 릴리스에서는 firewalld 리로드 후, 루프백 주소로만 접근 가능해야 하는 게시된 컨테이너 포트가 로컬 네트워크에서 직접 접근될 수 있던 문제를 수정했어요. CVE-2025-54388 / GHSA-x4rx-4gw3-53p4 / moby/moby#50506.
패키징 업데이트
- Buildx를 v0.26.1로 업데이트했어요. docker/docker-ce-packaging#1230
- Compose를 v2.39.1로 업데이트했어요. docker/docker-ce-packaging#1234
- Docker Model CLI 플러그인을 v0.1.36으로 업데이트했어요. docker/docker-ce-packaging#1233
28.3.2
2025-07-09
이번 패치 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.
버그 수정 및 개선
- 원격 데몬을 대상으로 할 때
--use-api-socket이 올바르게 작동하지 않던 문제를 수정했어요. docker/cli#6157 - 디버그 로깅이 활성화된 경우 출력되던 불필요한 "otel error" 로그를 수정했어요. docker/cli#6160
- SSH 연결로 원격 데몬에 접속할 때 예상치 못한 확장을 방지하기 위해 SSH 인자를 따옴표로 감싸도록 했어요. docker/cli#6147
docker login및docker logout중에DOCKER_AUTH_CONFIG가 설정되어 있으면 경고를 출력하도록 했어요. docker/cli#6163
패키징 업데이트
- Compose를 v2.38.2로 업데이트했어요. docker/docker-ce-packaging#1225
- Docker Model CLI 플러그인을 v0.1.33으로 업데이트했어요. docker/docker-ce-packaging#1227
- Go 런타임을 1.24.5로 업데이트했어요. moby/moby#50354
28.3.1
2025-07-02
이번 패치 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.
패키징 업데이트
- BuildKit을 v0.23.2로 업데이트했어요. moby/moby#50309
- Compose를 v2.38.1로 업데이트했어요. docker/docker-ce-packaging#1221
- Model을 v0.1.32로 업데이트했어요. Docker Compose의 새로운 최상위
models:키 지원이 추가됐어요. docker/docker-ce-packaging#1222
28.3.0
2025-06-24
이번 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.
새로운 기능
docker run --gpus에서 AMD GPU를 지원하게 됐어요. moby/moby#49952DOCKER_AUTH_CONFIG를 자격 증명 저장소로 사용할 수 있게 됐어요. docker/cli#6008
버그 수정 및 개선
- /containers/{id}/stop API로 컨테이너를 중지할 때(API 응답 전에) 데몬 데이터베이스의 컨테이너 상태가 최신 상태인지 확인하도록 했어요. /containers/json API에서 사용하는 상태예요. moby/moby#50136
docker image inspect가 빈 필드를 생략하던 문제를 수정했어요. moby/moby#50135- containerd 이미지 스토어가 비활성화된 경우
docker images --tree가 이미지를 사용 중으로 표시하지 않던 문제를 수정했어요. docker/cli#6140 - 인증이 필요할 때 로그인 자격 증명을 요구하는 프롬프트 때문에
docker pull/push가 비대화형 모드에서 멈추던 문제를 수정했어요. docker/cli#6141 - Swarm에서 노드가 떠날 때 발생할 수 있는 리소스 누수를 수정했어요. moby/moby#50115
- 다른 레지스트리에 로그인할 때
docker pull의 로그인 프롬프트에 Docker Hub 관련 힌트가 표시되던 회귀 문제를 수정했어요. docker/cli#6135 - 배치 기본 설정(placement preferences)이 있는 서비스를 스케일 업한 후 Swarm의 모든 새 태스크가 영원히 PENDING 상태에 갇힐 수 있던 문제를 수정했어요. moby/moby#50211
- Docker 23.0에서 실수로 도입된 문서화되지 않은 숨은 최상위
docker remove명령을 제거했어요. docker/cli#6144 dockerd --validate의 일부로 registry-mirrors 구성을 검증하고 잘못된 미러에 대한 오류 메시지를 개선했어요. moby/moby#50240dockerd-rootless-setuptool.sh: subuid/subgid 시스템 요구 사항이 충족되지 않았을 때 오류 메시지 없이 조용히 반환되던 문제를 수정했어요. moby/moby#50059- containerd 이미지 스토어:
docker push가 원격 저장소에 태그를 생성하지 않던 문제를 수정했어요. moby/moby#50199 - containerd 이미지 스토어:
docker pull/push중 토큰 서버가 반환한 오류 처리 방식을 개선했어요. moby/moby#50176
패키징 업데이트
- OpenRC용 containerd 서비스 이름을 커스터마이즈할 수 있게 됐어요. moby/moby#50156
- BuildKit을 v0.23.1로 업데이트했어요. moby/moby#50243
- Buildx를 v0.25.0으로 업데이트했어요. docker/docker-ce-packaging#1217
- Compose를 v2.37.2로 업데이트했어요. docker/docker-ce-packaging#1219
- Docker Model CLI 플러그인을 v0.1.30으로 업데이트했어요. docker/docker-ce-packaging#1218
- Go 런타임을 1.24.4로 업데이트했어요. docker/docker-ce-packaging#1213, moby/moby#50153, docker/cli#6124
네트워킹
- https://github.com/moby/moby/issues/50129에서 보고된 회귀 문제 때문에 28.2.x 빌드에 추가된 Swarm 관련 변경사항을 되돌렸어요. moby/moby#50169
- 되돌림:
docker network inspect --verbose가 때때로 데몬을 크래시시킬 수 있던 문제 수정(https://github.com/moby/moby/pull/49937). - 되돌림: Swarm에 ingress 네트워크가 없는 경우 특정 상황에서 오버레이 네트워크의 로드밸런서 IP 주소가 해제되지 않던 문제 수정(https://github.com/moby/moby/pull/49948).
- 되돌림: 바쁜 클러스터와 손실이 많은 네트워크에서 NetworkDB의 안정성 개선(https://github.com/moby/moby/pull/49932).
- 되돌림: NetworkDB의 안정성 및 수렴 속도 개선(https://github.com/moby/moby/pull/49939).
- 일부 컨테이너 포트가
0.0.0.0에 매핑되고 다른 포트가 특정 호스트 주소에 매핑될 때 컨테이너 시작이 실패하거나 UDP 포트 매핑이 실패할 수 있던 문제를 수정했어요. moby/moby#50054 - 오버레이 네트워크의
network inspect응답에서 이제EnableIPv4가 true로 보고돼요. moby/moby#50147 - Windows: 호스트에
"Mirrored"유형의 네트워크가 있는 경우 데몬 시작 시간을 개선했어요. moby/moby#50155 - Windows:
docker system prune과docker network prune이 Docker가 생성한 네트워크만 제거하도록 했어요. moby/moby#50154
API
- API 버전을 1.51로 업데이트했어요. moby/moby#50145
GET /images/json이 이제 모든 이미지의Containers필드 값을 해당 이미지를 사용하는 컨테이너 수로 설정해요. moby/moby#50146
폐기 예정 사항
GET /images/{name}/json응답의 빈/nil 이미지 구성 필드가 폐기 예정이며 v29.0에서 제거될 예정이에요. docker/cli#6129api/types/container패키지의ExecOptions.Detach가 폐기 예정이에요. 이 필드는 사용되지 않으며 향후 릴리스에서 제거될 예정이에요. moby/moby#50219pkg/idtools패키지의IdentityMapping과Identity.Chown이 폐기 예정이에요. moby/moby#50210
28.2.2
2025-05-30
이번 패치 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.
버그 수정 및 개선
- containerd 이미지 스토어:
docker build --push가 실패하던 회귀 문제를 수정했어요. 이는docker build가 재정의된 이미지를 dangling으로 유지하지 않던 문제에 대한 수정을 되돌린 거예요. moby/moby#50105
네트워킹
- iptables
DOCKER-USER체인을 생성할 때 명시적RETURN규칙을 추가하지 않도록 했어요. 이제 사용자가 자신의 규칙을 삽입할 뿐만 아니라 추가할 수도 있어요. 기존 규칙은 업그레이드 시 제거되지 않지만, 재부팅 후에는 교체되지 않아요. moby/moby#50098
28.2.1
2025-05-29
패키징 업데이트
- v28.2.0에서 새 설치 시
docker그룹/사용자 생성이 실패하던 패키징 회귀 문제를 수정했어요. docker-ce-packaging#1209
28.2.0
2025-05-28
이번 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.
📝 참고
RHEL 패키지는 현재 제공되지 않으며 추후 출시될 예정이에요.
새로운 기능
docker ps에{{.Platform}}포맷 옵션을 추가해서 컨테이너가 실행 중인 이미지의 플랫폼을 표시할 수 있게 됐어요. docker/cli#6042docker run/create에서-v/--volume또는--mount type=bind옵션을 사용할 때 바인드 마운트 소스의 상대 경로(../)를 지원하게 됐어요. docker/cli#4966- CDI가 이제 기본적으로 활성화됐어요. moby/moby#49963
docker info에서 발견된 CDI 디바이스를 표시하도록 했어요. docker/cli#6078docker image rm: 멀티 플랫폼 이미지에서 변형을 제거하는--platform옵션을 추가했어요. docker/cli#6109- containerd 이미지 스토어: Windows에서 Windows 컨테이너 이미지를 빌드하기 위한 초기 BuildKit 지원이 추가됐어요(
DOCKER_BUILDKIT=1로 옵트인 필요). moby/moby#49740
버그 수정 및 개선
- fluentd 로그 드라이버에 새 로그 옵션(
fluentd-write-timeout)을 추가했어요. fluentd 연결에 대한 쓰기 시간 제한을 지정할 수 있어요. moby/moby#49911 - 실험적
--use-api-socket옵션에 대한DOCKER_AUTH_CONFIG지원을 추가했어요. docker/cli#6019 - 존재하지 않는 사용자나 그룹을 지정했을 때
docker exec가 10초 동안 대기하던 문제를 수정했어요. moby/moby#49868 docker swarm init이--external-ca의cacert옵션을 무시하던 문제를 수정했어요. docker/cli#5995- CLI가 구성 파일(
~/.docker/config.json)이 상대 심볼릭 링크인 경우 올바르게 저장하지 못하던 문제를 수정했어요. docker/cli#5282 - CDI 디바이스를 사용하는
--restart always정책의 컨테이너가 데몬 재시작 시 시작에 실패하던 문제를 수정했어요. moby/moby#49990 - 여러 번 설정할 수 있는 플래그라도 셸 완성이 일부 플래그를 한 번만 완성하도록 수정했어요. docker/cli#6030
- Swarm CSI 드라이버의
plugin does not implement PluginAddr interface오류를 수정했어요. moby/moby#49961 - 잘못된 옵션에 대한
docker login오류 메시지를 개선했어요. docker/cli#6036 - CLI가 강제로 종료되더라도 터미널 상태가 복원되도록 했어요. docker/cli#6058
- 기본 seccomp 프로필을 libseccomp v2.6.0에 맞게 업데이트했어요. 새 syscall은 다음과 같아요:
listmount,statmount,lsm_get_self_attr,lsm_list_modules,lsm_set_self_attr,mseal,uretprobe,riscv_hwprobe,getxattrat,listxattrat,removexattrat,setxattrat. 이로써 컨테이너가 이 syscall들을 사용할 때 EPERM 오류를 받지 않게 됐어요. moby/moby#50077 docker inspect: 셸 완성 추가,--type플래그 설명 개선, 검증 개선을 했어요. docker/cli#6052- containerd 이미지 스토어: BuildKit 가비지 컬렉터를 기본적으로 활성화했어요. moby/moby#49899
- containerd 이미지 스토어:
docker build가 재정의된 이미지를 dangling으로 유지하지 않던 문제를 수정했어요. moby/moby#49702 - containerd 이미지 스토어:
docker system df가 음수 재확보 가능 공간을 보고하던 문제를 수정했어요. moby/moby#49707 - containerd 이미지 스토어: 멀티 플랫폼 이미지 푸시 시 중복
PUT요청이 발생하던 문제를 수정했어요. moby/moby#49949
패키징 업데이트
- 수명이 종료된 Ubuntu 20.04 "Focal" 패키지를 중단했어요. docker/docker-ce-packaging#1200
- RPM 기반
docker-ceman 페이지의 설치 위치를 수정했어요. docker/docker-ce-packaging#1203 - BuildKit을 v0.22.0으로 업데이트했어요. moby/moby#50046
- Buildx를 v0.24.0으로 업데이트했어요. docker/docker-ce-packaging#1205
- Compose를 v2.36.2로 업데이트했어요. docker/docker-ce-packaging#1208
- Go 런타임을 1.24.3으로 업데이트했어요. docker/docker-ce-packaging#1192, docker/cli#6060, moby/moby#49174
네트워킹
- 브리지 네트워크 옵션
"com.docker.network.bridge.trusted_host_interfaces"를 추가했어요. 콜론으로 구분된 인터페이스 이름 목록을 받아요. 이 인터페이스들은 컨테이너 IP 주소의 게시된 포트에 직접 접근할 수 있어요. moby/moby#49832 - 호스트 외부에서 컨테이너로 직접 주소 지정된 패킷 필터링을 비활성화하는 데몬 옵션
"allow-direct-routing"을 추가했어요. moby/moby#49832 - 네트워크 생성 요청의
EnableIPv4또는EnableIPv6로 재정의된 경우 inspect 출력에 네트워크 옵션com.docker.network.enable_ipv4또는com.docker.network.enable_ipv6을 표시하지 않도록 했어요. moby/moby#49866 - 데몬 재시작 후 빈 엔드포인트 이름을 나열하는 "has active endpoints" 오류로 네트워크 삭제가 실패할 수 있던 문제를 수정했어요. moby/moby#49901
docker network inspect --verbose가 때때로 데몬을 크래시시킬 수 있던 문제를 수정했어요. moby/moby#49937- Swarm에 ingress 네트워크가 없는 경우 특정 상황에서 오버레이 네트워크의 로드밸런서 IP 주소가 해제되지 않던 문제를 수정했어요. moby/moby#49948
- 바쁜 클러스터와 손실이 많은 네트워크에서 NetworkDB의 안정성을 개선했어요. moby/moby#49932
- NetworkDB의 안정성 및 수렴 속도를 개선했어요. moby/moby#49939
API
DELETE /images/{name}이 이제platforms쿼리 파라미터를 지원해요. JSON으로 인코딩된 OCI Platform 객체 배열을 받아서 콘텐츠를 삭제할 특정 플랫폼을 선택할 수 있어요. moby/moby#49982GET /info에 이제DiscoveredDevices필드가 포함돼요. 이는DeviceInfo객체의 배열이며, 각 객체는 디바이스 드라이버가 발견한 디바이스에 대한 세부 정보를 제공해요. moby/moby#49980
Go SDK
api/types/container패키지:ContainerState와 컨테이너 상태 상수를 추가했어요. moby/moby#49965api/types/container패키지:Summary.State를ContainerState로 변경했어요. moby/moby#49991api/types/container패키지: 건강 상태 상수를 위한HealthStatus타입을 정의했어요. moby/moby#49876api/types패키지:api/types/build로 이동된BuildResult,ImageBuildOptions,ImageBuildOutput,ImageBuildResponse,BuilderVersion,BuilderV1,BuilderBuildKi를 폐기 예정으로 처리했어요. moby/moby#50025
폐기 예정 사항
- API: 폐기 예정:
GET /images/{name}/json이 더 이상 다음 필드를 반환하지 않아요:Config,Hostname,Domainname,AttachStdin,AttachStdout,AttachStderr,Tty,OpenStdin,StdinOnce,Image,NetworkDisabled(설정된 경우가 아니면 이미 생략),MacAddress(설정된 경우가 아니면 이미 생략),StopTimeout(설정된 경우가 아니면 이미 생략). 이 추가 필드들은 구현 세부 사항 때문에 응답에 포함됐지만 이미지의 구성의 일부가 아니었고, API v1.46에서 폐기 예정으로 표시됐으며 이제 생략돼요. moby/moby#48457 - Go-SDK:
builder/remotecontext.Rel()을 폐기 예정으로 처리했어요. 이 함수는 구형 Go 버전에서 필요했지만 이제filepath.Rel()로 대체할 수 있어요. moby/moby#49843 - Go-SDK:
api/types패키지의BuildCachePruneOptions를 폐기 예정으로 처리하고api/types/builder.CachePruneOptions를 사용하도록 했어요. moby/moby#50015 - Go-SDK:
api/types패키지의BuildCachePruneReport를 폐기 예정으로 처리하고api/types/builder.CachePruneReport를 사용하도록 했어요. moby/moby#50015 - Go-SDK:
api/types패키지의NodeListOptions,NodeRemoveOptions,ServiceCreateOptions,ServiceUpdateOptions,RegistryAuthFromSpec,RegistryAuthFromPreviousSpec,ServiceListOptions,ServiceInspectOptions,SwarmUnlockKeyResponse를 폐기 예정으로 처리했어요. 이들은api/types/swarm으로 이동됐어요. moby/moby#50027 - Go-SDK:
api/types패키지의SecretCreateResponse,SecretListOptions,ConfigCreateResponse,ConfigListOptions를 폐기 예정으로 처리했어요. 이들은api/types/swarm으로 이동됐어요. moby/moby#50024 - Go-SDK:
client패키지의IsErrNotFound를 폐기 예정으로 처리했어요. moby/moby#50012 - Go-SDK:
container패키지의IsValidHealthString을 폐기 예정으로 처리하고api/types/container.ValidateHealthStatus를 사용하도록 했어요. moby/moby#49893 - Go-SDK:
container패키지의StateStatus,WaitCondition, 그리고 관련 상수WaitConditionNotRunning,WaitConditionNextExit,WaitConditionRemoved를 폐기 예정으로 처리했어요.api/types/container의 동등한 항목을 사용하세요. moby/moby#49874 - Go-SDK:
opts패키지의ListOpts.GetAll을 폐기 예정으로 처리하고ListOpts.GetSlice를 사용하도록 했어요. docker/cli#6032 docker search에서 폐기 예정이었던IsAutomated포맷 플레이스홀더를 제거했어요. docker/cli#6091- OCI 비준수
docker.pkg.github.com레지스트리에서 이미지를 풀링하는 폴백을 제거했어요. moby/moby#50094 - 레거시 v2, schema 1 이미지 풀링 지원을 제거하고
DOCKER_ENABLE_DEPRECATED_PULL_SCHEMA_1_IMAGE환경 변수를 제거했어요. moby/moby#50036, moby/moby#42300 GET /info응답의BridgeNfIptables및BridgeNfIp6tables필드는 API v1.48에서 폐기 예정이었고, API v1.50에서 생략됐어요. moby/moby#49904errdefs패키지:errdefs.FromStatusCode를 폐기 예정으로 처리했어요. containerd의errhttp.ToNative를 사용하세요. moby/moby#50030
28.1.1
2025-04-18
이번 패치 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.
버그 수정 및 개선
dockerd-rootless-setuptool.sh가iptables누락을 잘못 보고하던 문제를 수정했어요. moby/moby#49833- containerd 이미지 스토어: 크기가 0인 tar 헤더가 포함된 아카이브로
docker load를 사용할 때 발생할 수 있는 데몬 크래시를 수정했어요. moby/moby#49837
패키징 업데이트
- Buildx를 v0.23.0으로 업데이트했어요. docker/docker-ce-packaging#1185
- Compose를 v2.35.1로 업데이트했어요. docker/docker-ce-packaging#1188
네트워킹
- 업스트림 DNS 서버를 찾지 못했을 때 컨테이너의
/etc/resolv.conf에 경고를 추가했어요. moby/moby#49827
28.1.0
2025-04-17
이번 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.
새로운 기능
docker buildx bake의 별칭으로docker bake하위 명령을 추가했어요. docker/cli#5947- 실험적:
docker run과docker create에 새--use-api-socket플래그를 추가했어요. 컨테이너 내부에서 Docker 소켓에 접근하고 호스트의 자격 증명을 컨테이너와 공유할 수 있게 해줘요. docker/cli#5858 docker image inspect가 이제 멀티 플랫폼 이미지의 특정 플랫폼을 검사하는--platform플래그를 지원해요. docker/cli#5934
버그 수정 및 개선
- 컨텍스트 이름에 대한 CLI 셸 완성을 추가했어요. docker/cli#6016
docker images --tree가 총 이미지 콘텐츠 크기에 비컨테이너 이미지 콘텐츠 크기를 포함하지 않던 문제를 수정했어요. docker/cli#6000docker load가 교체된 이미지를 보존하지 못하던 문제를 수정했어요. moby/moby#49650- 커스텀 레지스트리에 로그인할 때
docker login힌트를 수정했어요. docker/cli#6015 - CPU 코어 수가 많은 머신에서
docker stats가 제대로 작동하지 않던 문제를 수정했어요. moby/moby#49734 - 프라이빗 저장소와 상호작용할 때
docker pull/push가 실패하던 회귀 문제를 수정했어요. docker/cli#5964 ip_tables커널 모듈이 없는 호스트에서 rootless Docker 설정을 방해하던 문제를 수정했어요. moby/moby#49727- firewalld 리로드 후 원치 않는 iptables 규칙이 복원되어 삭제되지 않을 수 있던 문제를 수정했어요. moby/moby#49728
docker service scale의 CLI 완성을 개선했어요. docker/cli#5968docker images --tree가 이제 기본적으로 untagged 및 dangling 이미지를 모두 숨겨요. docker/cli#5924docker system info가 Docker 데몬에 연결할 수 없으면 종료 코드를 제공하게 됐어요. docker/cli#5918- containerd 이미지 스토어: BuildKit으로 빌드할 때
image tag이벤트가 발생하지 않던 문제를 수정했어요. moby/moby#49678 - containerd 이미지 스토어:
docker push/pull의 원격 레지스트리 오류 처리를 개선했어요. moby/moby#49770 - containerd 이미지 스토어: 레이어가 아닌 이미지 blob에 대한 풀 진행 상황을 표시하도록 했어요. moby/moby#49746
패키징 업데이트
- Debian "Trixie" 패키지를 추가했어요. docker/docker-ce-packaging#1181
- Fedora 42 패키지를 추가했어요. docker/containerd-packaging#418, docker/docker-ce-packaging#1169
- Ubuntu 25.04 "Plucky Puffin" 패키지를 추가했어요. docker/containerd-packaging#419, docker/docker-ce-packaging#1177
- BuildKit을 v0.21.0으로 업데이트했어요. moby/moby#49809
- Compose를 v2.35.0으로 업데이트했어요. docker/docker-ce-packaging#1183
- Go 런타임을 1.23.8로 업데이트했어요. docker/cli#5986, docker/docker-ce-packaging#1180, moby/moby#49737
네트워킹
- Swarm 컨테이너의 호스트 포트 매핑이
docker ps와docker inspect에서 중복 표시되던 버그를 수정했어요. moby/moby#49724 - "Bridge port not forwarding" 오류로 컨테이너 네트워크 연결이 실패하던 문제를 수정했어요. moby/moby#49705
- 기본 브리지 네트워크의 컨테이너에서
--link제거와 관련된 문제를 수정했어요. moby/moby#49778 - 네트워크-엔드포인트 관계 추적 방식을 개선해서 "has active endpoints" 오류가 잘못 반환될 가능성을 줄였어요. moby/moby#49736
- 삭제 중인 네트워크에 여전히 연결된 엔드포인트 이름을 포함하도록 "has active endpoints" 오류 메시지를 개선했어요. moby/moby#49773
API
- API 버전을 v1.49로 업데이트했어요. moby/moby#49718
GET /image/{name}/json이 이제 멀티 플랫폼 이미지의 어떤 플랫폼 변형을 검사할지 지정하는platform파라미터를 지원해요. moby/moby#49586GET /info가 이제 데몬의 방화벽 구성 정보를 포함하는FirewallBackend를 반환해요. moby/moby#49761
Go SDK
- 최소 요구 Go 버전을 go1.23으로 업데이트했어요. docker/cli#5868
cli/command/context패키지: JSON 출력에서 임시ContextType필드를 제거했어요. docker/cli#5981client패키지: 가능한 경우 이미지 참조를 정규 형식으로 유지하도록 했어요. moby/moby#49609
폐기 예정 사항
- API:
GET /info응답의RegistryConfig구조체에서 폐기 예정이었던AllowNondistributableArtifactsCIDRs및AllowNondistributableArtifactsHostnames필드가 API v1.49에서 생략됐어요. moby/moby#49749 - API: 폐기 예정:
GET /info엔드포인트의ContainerdCommit.Expected,RuncCommit.Expected,InitCommit.Expected필드는 API v1.48에서 폐기 예정이었고, API v1.49에서 생략됐어요. moby/moby#48556 - Go-SDK:
cli/command/image패키지의RunPull이 폐기 예정이에요. 이 함수는 내부적으로만 사용됐고 다음 릴리스에서 제거될 예정이에요. docker/cli#5975 - Go-SDK:
cli/config/configfile패키지의ConfigFile.Experimental필드가 폐기 예정이에요. 실험적 CLI 기능은 v20.10부터 항상 활성화되어 있어서 이 필드는 더 이상 사용되지 않아요. 선택적 기능에는ConfigFile.Features를 사용하세요. 이 필드는 향후 릴리스에서 제거될 예정이에요. docker/cli#5977 - Go-SDK:
pkg/archive를 폐기 예정으로 처리했어요.github.com/moby/go-archive로 마이그레이션됐어요. moby/moby#49743 - Go-SDK:
pkg/atomicwriter를 폐기 예정으로 처리했어요.github.com/moby/sys/atomicwriter로 마이그레이션됐어요. moby/moby#49748 - Go-SDK:
opts패키지에서 폐기 예정이었던PortOpt,ConfigOpt,SecretOpt별칭을 제거했어요. docker/cli#5953 - Go-SDK:
registry패키지의APIEndpoint.Official필드가 폐기 예정이에요. moby/moby#49706
28.0.4
2025-03-25
이번 패치 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.
버그 수정 및 개선
- 프라이빗 저장소와 상호작용할 때
docker pull/push가 실패하던 회귀 문제를 수정했어요. docker/cli#5964
28.0.3
2025-03-25
이번 패치 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.
버그 수정 및 개선
- 컨테이너가 데이터가 소비되기 전에 종료될 때
docker run이STDOUT/STDERR을 조기에 자르던 문제를 수정했어요. docker/cli#5957
패키징 업데이트
- BuildKit을 v0.20.2로 업데이트했어요. moby/moby#49698
runc를 v1.2.6으로 업데이트했어요. moby/moby#49682- containerd를 v1.7.26으로 업데이트했어요. docker/containerd-packaging#409
28.0.2
2025-03-19
이번 패치 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.
버그 수정 및 개선
- CLI 특정 속성(
docker.cli.*)이 다운스트림 OTel 서비스에 의도치 않게 전달되던 문제를 수정했어요. docker/cli#5842 - 사용자가 지정한
OTEL_RESOURCE_ATTRIBUTES가 CLI 내부 텔레메트리 속성에 의해 재정의되던 문제를 수정했어요. 이제 CLI가 사용자 지정 속성과 내부 속성을 제대로 병합해서 둘 다 공존할 수 있어요. docker/cli#5842 - Windows에서 v28.0.0 이전에 생성된 컨테이너가 있을 때 데몬이 시작에 실패하던 문제를 수정했어요. moby/moby#49626
docker buildx prune에서--min-free-space사용 시 발생할 수 있는 오류를 수정했어요. moby/moby#49623- 컨테이너를 닫을 때 데몬 로그에 발생하던 가짜
io: read/write on closed pipe오류를 수정했어요. moby/moby#49590 - containerd 소켓을 즉시 사용할 수 없을 때 Docker 데몬이 너무 일찍 실패하던 문제를 수정했어요. moby/moby#49603
- 기본적으로 컨테이너의
/proc및/sys에서 Linux 열 인터럽트 정보를 마스킹하도록 했어요. moby/moby#49560 contrib/check-config.sh가 iptables 관련 커널 모듈을 더 많이 확인하도록 업데이트했어요. moby/moby#49622- containerd 이미지 스토어:
--user로 전달된 사용자 ID 처리에서 정수 오버플로를 수정했어요. moby/moby#49652 - containerd 이미지 스토어: 데몬 로그에 기록되던 가짜
reference for unknown type: application/vnd.in-toto+json경고를 수정했어요. moby/moby#49652 - containerd 이미지 스토어: 많은 수의 컨테이너를 실행할 때
docker ps의 성능을 개선했어요. moby/moby#49365
패키징 업데이트
- BuildKit을 v0.20.1로 업데이트했어요. moby/moby#49587
- Buildx를 v0.22.0으로 업데이트했어요. docker/docker-ce-packaging#1175
- Compose를 v2.34.0으로 업데이트했어요. docker/docker-ce-packaging#1172
- Go 런타임을 1.23.7로 업데이트했어요. docker/cli#5890, docker/docker-ce-packaging#1171, moby/moby#49580
- RootlessKit을 v2.3.4로 업데이트했어요. moby/moby#49614
- containerd(정적 바이너리만)를 v1.7.27로 업데이트했어요. moby/moby#49656
네트워킹
- Linux 커널이
CONFIG_IP_NF_RAW를 지원하지 않는 시스템에서 Docker를 실행할 수 있게 해주는 환경 변수DOCKER_INSECURE_NO_IPTABLES_RAW=1을 추가했어요. 활성화하면 Docker가 iptablesraw테이블에 규칙을 생성하지 않아요. 경고: 로컬 네트워크의 다른 호스트가127.0.0.1에 게시된 포트라도 호스트 주소에 게시된 포트로 라우팅할 수 있게 되어 보안이 약화되므로 프로덕션 환경에서는 권장하지 않아요. 이 옵션은 Docker Engine 28.0.0에 도입된 일부 보안 강화를 우회해요. moby/moby#49621 - 상위 인터페이스가 다운된 macvlan 네트워크 드라이버에 엔드포인트가 연결된 경우에도 컨테이너 시작을 허용했어요. moby/moby#49630
gateway_mode=routed네트워크에서 시작된 패킷에 대해 DNAT를 건너뛰지 않도록 했어요. moby/moby#49577docker ps가 이중 스택 포트 매핑을 일관되지 않게 보고하던 버그를 수정했어요. moby/moby#49657docker-proxy가 UDP 데이터그램을 컨테이너로 전달하지 못할 수 있던 버그를 수정했어요. moby/moby#49649docker-proxy가 UDP 연결을 컨테이너로 너무 일찍 닫아서 소스 주소가 불필요하게 변경되던 버그를 수정했어요. moby/moby#49649
Go SDK
cli-plugins/manager의 다양한 타입과 상수를 별도 패키지로 이동했어요. docker/cli#5902- 최소 요구 Go 버전을 go1.23으로 업데이트했어요. moby/moby#49541
cli/command패키지:PrettyPrint유틸리티를cli/command/formatter로 이동했어요. docker/cli#5916runconfig/errors패키지:ErrConflictHostNetwork를ErrConflictConnectToHostNetwork와ErrConflictDisconnectFromHostNetwork로 분리했어요. moby/moby#49605
폐기 예정 사항
- Go-SDK:
cli-plugins/manager.ResourceAttributesEnvvar상수를 폐기 예정으로 처리했어요. 내부적으로 사용됐지만 OpenTelemetry 사양의 일부인OTEL_RESOURCE_ATTRIBUTES이름을 보유하고 있어요. 이 상수를 사용하는 사용자는 자체적으로 정의해야 해요. 다음 릴리스에서 제거될 예정이에요. docker/cli#5881 - Go-SDK:
opts.PortOpt,opts.ConfigOpt,opts.SecretOpt를 폐기 예정으로 처리했어요. 이 타입들은opts/swarmopts패키지로 이동됐어요. docker/cli#5907 - Go-SDK:
service/logs패키지를 제거했어요. docker/cli#5910 - Go-SDK:
cli/command/image패키지의PushTrustedReference를 폐기 예정으로 처리하고cli/trust로 이동했어요. docker/cli#5894 - Go-SDK:
cli/command/image패키지의TrustedPush를 폐기 예정으로 처리하고 내부화했어요. docker/cli#5894 - Go-SDK:
cli/command패키지의Cli.NotaryClient를 폐기 예정으로 처리했어요. 대신 ``trust.GetNotaryRepository를 사용하세요. 이 메서드는 더 이상 사용되지 않으며 다음 릴리스에서 제거될 예정이에요. docker/cli#5885 - Go-SDK:
cli/command패키지의Cli.RegistryClient를 폐기 예정으로 처리했어요. 이 메서드는 내부적으로만 사용됐고 다음 릴리스에서 제거될 예정이에요. 대신 ``client.NewRegistryClient를 사용하세요. docker/cli#5889, docker/cli#5889 - Go-SDK:
registry패키지의RepositoryInfo.Official필드를 폐기 예정으로 처리했어요. moby/moby#49567 - Go-SDK:
registry패키지의HostCertsDir를 폐기 예정으로 처리했어요. 이 함수는 내부적으로만 사용됐고 다음 릴리스에서 제거될 예정이에요. moby/moby#49612 - Go-SDK:
registry패키지의SetCertsDir를 폐기 예정으로 처리했어요. 인증서 디렉터리는 이제 RootlessKit으로 실행할 때 자동으로 선택되므로 수동으로 설정하면 안 돼요. moby/moby#49612
28.0.1
2025-02-26
이번 패치 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.
네트워킹
- 커널 모듈
ip_set,ip_set_hash_net,netfilter_xt_set에 대한 의존성을 제거했어요. - 이 의존성은 28.0.0 릴리스에서 도입됐지만 너무 파괴적이었어요. 이 모듈을 사용하는 iptables 규칙이 대체됐어요. moby/moby#49530
- IPv6가 비활성화된 호스트에서
--ip6tables=false없이도 데몬 시작을 허용했어요. moby/moby#49525 --restart=always이고 게시된 포트가 이미 사용 중인 컨테이너가 빠른 루프로 재시작되던 버그를 수정했어요. moby/moby#49507- iptables 규칙의 잘못된 순서로 인한 Swarm ingress 문제를 수정했어요. moby/moby#49538
--config-only네트워크에서 swarm 범위 네트워크 생성 시 발생하던 문제를 수정했어요. moby/moby#49521- 특정 IPAM 구성 없이 새로 생성된 네트워크에 대해
docker network inspect가 데몬 재시작 전까지 CIDR 접미사가 있는 IPv6 게이트웨이를 보고하던 문제를 수정했어요. moby/moby#49520 - 커널 모듈
ip_set,ip_set_hash_net,netfilter_xt_set을 사용할 수 없을 때 보고되는 오류를 개선했어요. moby/moby#49524 - Docker의 iptables 규칙 대부분을 filter-FORWARD 체인 밖으로 이동해서 다른 애플리케이션이 Docker 규칙 뒤에 따라와야 하는 규칙을 자유롭게 추가할 수 있게 했어요. moby/moby#49518
--help출력과 man 페이지를 업데이트해서 어떤 옵션이 기본 브리지 네트워크에만 적용되는지 명시했어요. moby/moby#49522
버그 수정 및 개선
docker context create가"skip-tls-verify"옵션을 사용할 때 항상 오류를 반환하던 문제를 수정했어요. docker/cli#5850- 셸 완성이 서비스와 노드에 대해 이름 대신 ID를 제안하던 문제를 수정했어요. docker/cli#5848
docker exec/run이 0이 아닌 상태를 반환할 때 표준 오류 출력에 종료 상태를 의도치 않게 출력하던 문제를 수정했어요. docker/cli#5854protocol "tcp" is not supported by the RootlessKit port driver "slirp4netns"회귀 문제를 수정했어요. moby/moby#49514- containerd 이미지 스토어: 모든 플랫폼에 대한 레이어가 누락된 멀티 플랫폼 이미지를
docker inspect로 표시할 수 없던 문제를 수정했어요. moby/moby#49533 - containerd 이미지 스토어:
docker images --tree가 잘못된 콘텐츠 크기를 보고하던 문제를 수정했어요. moby/moby#49535 - i386 컴파일 문제를 수정했어요. moby/moby#49526
패키징 업데이트
- GHSA-c6gw-w398-hv78 / CVE-2025-27144를 해결하기 위해
github.com/go-jose/go-jose/v4를 v4.0.5로 업데이트했어요. docker/cli#5867 - Buildx를 v0.21.1로 업데이트했어요. docker/docker-ce-packaging#1167
- Compose를 v2.33.1로 업데이트했어요. docker/docker-ce-packaging#1168
API
- containerd 이미지 스토어:
GET /images/json?manifests=1이 인덱스 전용 이미지에 대해Manifests를 채우지 않던 문제를 수정했어요. moby/moby#49533 - containerd 이미지 스토어:
GET /images/json및/images/<name>/json의Size.Content필드에 로컬에서 사용할 수 없는 콘텐츠 크기가 포함되던 문제를 수정했어요. moby/moby#49535
28.0.0
2025-02-19
이번 메이저 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.
- docker/cli, 28.0.0 milestone
- moby/moby, 28.0.0 milestone
- 폐기 및 제거된 기능은 Deprecated Features에서 확인할 수 있어요.
- Engine API 변경사항은 API version history에서 확인할 수 있어요.
새로운 기능
--mount type=image를 통해 컨테이너 내부에 이미지를 마운트하는 기능을 추가했어요. moby/moby#48798- 이미지에서 특정 경로를 마운트하려면
--mount type=image,image-subpath=[subpath],...옵션을 지정할 수도 있어요. docker/cli#5755 docker images --tree가 이제 메타데이터 배지를 표시해요. docker/cli#5744docker load,docker save,docker history가 이제--platform플래그를 지원해서 멀티 플랫폼 이미지에 대한 단일 플랫폼 작업 시 특정 플랫폼을 선택할 수 있어요. docker/cli#5331docker service create와docker stack에OOMScoreAdj를 추가했어요. docker/cli#5145docker buildx prune이 이제reserved-space,max-used-space,min-free-space,keep-bytes필터를 지원해요. moby/moby#48720- Windows: 시스템에 설치된 containerd 대신 데몬의 자식 프로세스로 containerd를 실행하는 기능을 추가했어요. moby/moby#47955
네트워킹
docker-proxy바이너리가 업데이트됐어요. 이전 버전은 업데이트된dockerd와 작동하지 않아요. moby/moby#48132- 사용자랜드 프록시(
docker-proxy)가 TCP 연결을 수락한 후 iptables NAT 규칙이 설정된 다음 실패할 수 있는 창을 닫았어요. rootlesskit-docker-proxy실행 파일은 더 이상 사용되지 않으며 빌드 및 배포에서 제거됐어요.- 호스트의
/etc/resolv.conf에서 읽은 DNS 네임서버는 이제 항상 호스트의 네트워크 네임스페이스에서 접근돼요. moby/moby#48290 - 호스트의
/etc/resolv.conf에 네임서버가 없고--dns재정의도 없을 때, 기본 브리지 네트워크와 빌드 컨테이너를 제외하고는 Google DNS 서버를 더 이상 사용하지 않아요. - 브리지 및 macvlan 네트워크의 컨테이너 인터페이스가 이제 무작위로 생성된 MAC 주소를 사용해요. moby/moby#48808
- 인터페이스가 시작될 때 Gratuitous ARP / Neighbour Advertisement 메시지가 전송되어 IP 주소가 재사용될 때 새로 생성된 MAC 주소와 연결되도록 해요.
- 기본 브리지 네트워크의 IPv6 주소는 이제 MAC 주소에서 파생되는 대신 IPAM으로 할당돼요.
- 폐기 예정이었던 OCI
prestart훅은 이제 빌드 컨테이너에서만 사용돼요. 다른 컨테이너의 경우 네트워크 인터페이스는 태스크 생성 완료 후, 컨테이너 태스크가 시작되기 전에 네트워크 네임스페이스에 추가돼요. moby/moby#47406 docker run,docker container create,docker network connect에 새gw-priority옵션을 추가했어요. 이 옵션은 Engine이 컨테이너의 기본 게이트웨이를 제공할 네트워크를 결정하는 데 사용돼요.docker run에서는 확장된--network구문에서만 이 옵션을 사용할 수 있어요. docker/cli#5664- 컨테이너를 네트워크에 연결할 때 사용되는 인터페이스 이름을 커스터마이즈하는 새 netlabel
com.docker.network.endpoint.ifname을 추가했어요. Linux의 모든 내장 네트워크 드라이버에서 지원돼요. moby/moby#49155 - 여러 네트워크가 지정된 컨테이너를 생성할 때 네트워크가 컨테이너에 연결되는 순서는 보장되지 않아요. 따라서 커스텀 인터페이스 이름이 자동 생성 이름과 같은 접두사(예:
eth)를 사용하면 컨테이너가 시작에 실패할 수 있어요. - 권장 방법은
en0같은 다른 접두사를 사용하거나eth100처럼 충돌하지 않을 만큼 높은 숫자 접미사를 사용하는 거예요. - 이 라벨은
docker network connect에서--driver-opt플래그로 지정할 수 있어요. 예:docker network connect --driver-opt=com.docker.network.endpoint.ifname=foobar … - 또는
docker run의 긴 형식--network플래그로 지정할 수 있어요. 예:docker run --network=name=bridge,driver-opt=com.docker.network.endpoint.ifname=foobar … - 커스텀 네트워크 드라이버가
GwAllocChecker기능을 보고하면, 네트워크가 생성되기 전에 네트워크 옵션이 포함된GwAllocCheckerRequest를 받아요. 그러면 커스텀 드라이버는 게이트웨이 IP 주소를 할당하지 말아야 한다고 응답할 수 있어요. moby/moby#49372
브리지 네트워크의 포트 게시
dockerd는 이제 Linux 커널에서ipset지원을 요구해요. moby/moby#48596- 포트 게시 및 네트워크 격리를 구현하는 데 사용되는
iptables및ip6tables규칙이 대폭 수정됐어요. 이는 아래의 일부 기능 변경을 가능하게 하며, 향후 릴리스에서 네이티브nftables지원을 가능하게 하는 리팩토링의 첫 단계예요. moby/moby#48815 - 이전 버전의 데몬으로 다운그레이드해야 한다면 새 규칙을 수동으로 정리해야 할 수 있어요. 가장 간단하고 확실한 방법은 호스트를 재부팅하거나, 이전 버전의 데몬을 시작하기 전에
iptables -F및ip6tables -F를 사용해filter테이블의 모든 기존iptables규칙을 플러시하는 거예요. 그게 불가능하다면 루트로 다음 명령을 실행하세요: iptables -D FORWARD -m set --match-set docker-ext-bridges-v4 dst -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; ip6tables -D FORWARD -m set --match-set docker-ext-bridges-v6 dst -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPTiptables -D FORWARD -m set --match-set docker-ext-bridges-v4 dst -j DOCKER; ip6tables -D FORWARD -m set --match-set docker-ext-bridges-v6 dst -j DOCKER- 이전에 iptables filter-FORWARD 정책을
ACCEPT로 설정하고 실행 중이었고 게시되지 않은 포트에 대한 접근을 복원해야 한다면,DOCKER체인의 브리지별 네트워크 규칙도 삭제하세요. 예:iptables -D DOCKER ! -i docker0 -o docker0 -j DROP. - 원격 호스트가 게시된 포트에서 컨테이너에 직접 연결할 수 있게 허용하던 보안 문제를 수정했어요. moby/moby#49325
- 이웃 호스트가 루프백 주소에 매핑된 포트에 연결할 수 있게 허용하던 보안 문제를 수정했어요. moby/moby#49325
- 링크-로컬 주소로의 포트 게시를 방해하던 문제를 수정했어요. moby/moby#48570
- 컨테이너가 게시한 UDP 포트는 이제 호스트의 공용 IP 주소를 통해 다른 네트워크의 컨테이너에서 안정적으로 접근할 수 있어요. moby/moby#48571
- Docker는 이제 호스트 자체에서 IP 포워딩(sysctls
net.ipv6.conf.all.forwarding및net.ipv6.conf.default.forwarding)을 활성화한 경우에만filter테이블의FORWARD체인에 대한ip6tables정책을DROP으로 설정해요. 이는 기존 IPv4 동작과 일치하게 된 거예요. moby/moby#48594 - 호스트에서 IPv6 포워딩이 활성화되어 있지만 Docker가 ip6tables filter-FORWARD 정책을
DROP으로 설정할 것에 의존하고 있었다면, 보안을 위해 호스트 구성을 업데이트해야 할 수 있어요. p/-publish로 노출되지 않은 컨테이너 포트에 대한 직접 라우팅 접근이 이제DOCKERiptables 체인에서 차단돼요. moby/moby#48724- 호스트의 기본 iptables filter-FORWARD 정책이 이전에
ACCEPT로 남아 있었고, 원격 호스트에서 컨테이너의 게시되지 않은 포트에 대한 직접 라우팅 접근이 여전히 필요하다면 다음 옵션이 있어요: - 필요한 포트를 게시하세요.
- 아래 설명된 새
gateway_mode_ipv[46]=nat-unprotected를 사용하세요. - 호스트 주소에 게시된 컨테이너 포트는 NAT 또는 사용자랜드 프록시를 사용해 해당 호스트 주소를 통해 계속 접근할 수 있어요.
- 게시되지 않은 컨테이너 포트는 컨테이너의 IP 주소를 통해 Docker 호스트에서 계속 직접 접근할 수 있어요.
gateway_mode_ipv[46]=routed로 생성된 네트워크는 이제 호스트 외부뿐만 아니라 동일한 Docker 호스트에서 실행되는 다른 브리지 네트워크에서도 접근할 수 있어요. moby/moby#48596- 브리지 드라이버 옵션
com.docker.network.bridge.gateway_mode_ipv4및com.docker.network.bridge.gateway_mode_ipv6이 이제nat-unprotected모드를 허용해요. moby/moby#48597 nat-unprotected는 기본nat모드와 유사하지만 포트/프로토콜별 규칙이 설정되지 않아요. 즉, 원격 호스트에서 직접 라우팅으로 컨테이너의 모든 포트에 접근할 수 있어요.- 브리지 드라이버 옵션
com.docker.network.bridge.gateway_mode_ipv4및com.docker.network.bridge.gateway_mode_ipv6이 네트워크가internal인 경우isolated모드를 허용해요. moby/moby#49262 - 일반적으로
internal네트워크의 브리지 디바이스에는 주소가 할당돼요. 따라서 Docker 호스트의 프로세스가 네트워크에 접근할 수 있고, 네트워크의 컨테이너는 해당 브리지 주소에서 수신 대기하는 호스트 서비스("모든" 호스트 주소,0.0.0.0또는::에서 수신 대기하는 서비스 포함)에 접근할 수 있어요. - 게이트웨이 모드가
isolated인internal브리지 네트워크는 Docker 호스트에 주소가 없어요. - 포트 매핑에 호스트 IP 주소나 포트 번호가 포함되어 있는데
--gateway_mode_ipv[46]로 호스트의 NAT가 비활성화되어 사용할 수 없는 경우, 컨테이너 생성이 더 이상 실패하지 않아요. 네트워크가 연결되거나 연결 해제될 때 게이트웨이 엔드포인트가 변경되면 사용되지 않는 필드가 필요할 수 있기 때문이에요. 사용되지 않는 필드에 대한 메시지가 로그에 기록돼요. moby/moby#48575 - 사용자랜드 프록시가 활성화된 경우 컨테이너 자체의 게시된 포트에 대한 iptables nat-POSTROUTING masquerade 규칙을 생성하지 않도록 했어요. moby/moby#48854
IPv6
docker network create에--ipv4옵션을 추가했어요. 네트워크에 대한 IPv4 주소 할당을 비활성화하려면docker network create --ipv4=false [...]를 사용하세요. docker/cli#5599- 데몬 옵션
--ipv6(daemon.json에서"ipv6": true)을 이제fixed-cidr-v6없이 사용할 수 있어요. moby/moby#48319 - IPAM이 이제 "/64"보다 큰 서브넷을 처리해요. moby/moby#49223
- 브리지 네트워크에 속한 브리지에 할당된 주소에 대해 중복 주소 감지(DAD)가 이제 비활성화됐어요. moby/moby#48609
- IPv6 전용 네트워크와의 호환성을 위해
host-gateway를 수정했어요. moby/moby#48807 --add-host옵션에서 주소 대신 특수 값host-gateway를 사용하면 호스트를 이름으로 참조할 수 있도록 Docker 호스트의 주소로 대체돼요. 사용되는 주소는 기본 브리지(보통docker0)에 속해요. 지금까지는 브리지 네트워크의 모든 컨테이너에 IPv4 주소가 있었기 때문에 항상 IPv4 주소였어요.- 이제 기본 브리지 네트워크에서 IPv6가 활성화되어 있으면
/etc/hosts항목이 IPv4 및 IPv6 주소 모두에 대해 생성돼요. 따라서 IPv6 전용 네트워크에만 연결된 컨테이너도 이름으로 호스트에 접근할 수 있어요. --host-gateway-ip옵션은host-gateway를 대체하는 데 사용되는 주소를 재정의해요. 이제 커맨드라인에서 IPv4 게이트웨이 하나와 IPv6 게이트웨이 하나, 총 두 개의 옵션을 허용해요.daemon.json파일에서 두 주소를 제공하려면"host-gateway-ips"를 사용하세요. 예:"host-gateway-ips": ["192.0.2.1", "2001:db8::1111"].
버그 수정 및 개선
- 기본적으로 IPv6 루프백 주소를 insecure registry로 추가했어요. moby/moby#48540
dockerd에 대한 Cobra 생성 완성 스크립트 지원을 추가했어요. moby/moby#49339- 부팅 시
systemd자동 시작으로 컨테이너를 실행할 때 DNS 쿼리가 실패하던 문제를 수정했어요. moby/moby#48812 - Docker Swarm 모드가
volume.subpath를 무시하던 문제를 수정했어요. docker/cli#5833 docker export가 작업이 취소된 후에도 내보내기를 계속하던 문제를 수정했어
더 알아보기 (Learn more)
관련 내용은 Docker 공식 문서에서 확인할 수 있어요.