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

패키징 업데이트

폐기 예정 사항

  • 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 마일스톤에서 확인할 수 있어요.

버그 수정 및 개선

폐기 예정 사항

  • api/types/image 패키지: InspectResponseParentDockerVersion 필드가 폐기 예정이에요. moby/moby#51105
  • api/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

패키징 업데이트

네트워킹

  • 데이터 스토어에서 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#6481
  • cli/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 pulldocker image pull에 셸 완성 기능을 추가했어요. docker/cli#6420
  • v28.3.3에서 클라이언트가 X-Registry-Auth 헤더를 보내지 않을 때 docker push 중 패닉이 발생할 수 있던 회귀 문제를 수정했어요. moby/moby#50738
  • Windows: 이미지 풀링 시 "access denied" 오류가 발생하던 문제를 잠재적으로 수정했어요. moby/moby#50871
  • containerd 이미지 스토어: 로컬에서 빌드된 비네이티브 이미지에 대해 docker historysnapshot X does not exist 오류로 실패하던 문제를 수정했어요. moby/moby#50875
  • containerd 이미지 스토어: docker image prune이 올바른 untagdelete 이벤트를 발생시키고, 모든 blob 대신 삭제된 이미지의 루트 다이제스트만 나열하도록 수정했어요. moby/moby#50837
  • 인증 누락으로 실패한 후 docker pushdocker pull에서 대화형 로그인 프롬프트를 제거했어요. docker/cli#6256

패키징 업데이트

네트워킹

  • live-restore 시 컨테이너 재시작이 느려질 수 있던 문제를 수정했어요. moby/moby#50829

API

  • AuthConfig.Email 필드의 폐기 예정 메시지를 업데이트했어요. moby/moby#50797

Go SDK

폐기 예정 사항

  • --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 패키지의 NewBuilderCommandNewBakeStubCommand가 폐기 예정이에요. 이 함수들은 다음 릴리스에서 제거될 예정이에요. 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 패키지의 RunCreateCreateOptions가 폐기 예정이에요. docker/cli#6403
  • Go-SDK: cli/command/context 패키지의 RunExportExportOptions가 폐기 예정이에요. docker/cli#6403
  • Go-SDK: cli/command/context 패키지의 RunImport가 폐기 예정이에요. docker/cli#6403
  • Go-SDK: cli/command/context 패키지의 RunRemoveRemoveOptions가 폐기 예정이에요. docker/cli#6403
  • Go-SDK: cli/command/context 패키지의 RunUpdateUpdateOptions가 폐기 예정이에요. 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.

패키징 업데이트

28.3.2

2025-07-09

이번 패치 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.

버그 수정 및 개선

  • 원격 데몬을 대상으로 할 때 --use-api-socket이 올바르게 작동하지 않던 문제를 수정했어요. docker/cli#6157
  • 디버그 로깅이 활성화된 경우 출력되던 불필요한 "otel error" 로그를 수정했어요. docker/cli#6160
  • SSH 연결로 원격 데몬에 접속할 때 예상치 못한 확장을 방지하기 위해 SSH 인자를 따옴표로 감싸도록 했어요. docker/cli#6147
  • docker logindocker logout 중에 DOCKER_AUTH_CONFIG가 설정되어 있으면 경고를 출력하도록 했어요. docker/cli#6163

패키징 업데이트

28.3.1

2025-07-02

이번 패치 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.

패키징 업데이트

28.3.0

2025-06-24

이번 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.

새로운 기능

  • docker run --gpus에서 AMD GPU를 지원하게 됐어요. moby/moby#49952
  • DOCKER_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#50240
  • dockerd-rootless-setuptool.sh: subuid/subgid 시스템 요구 사항이 충족되지 않았을 때 오류 메시지 없이 조용히 반환되던 문제를 수정했어요. moby/moby#50059
  • containerd 이미지 스토어: docker push가 원격 저장소에 태그를 생성하지 않던 문제를 수정했어요. moby/moby#50199
  • containerd 이미지 스토어: docker pull/push 중 토큰 서버가 반환한 오류 처리 방식을 개선했어요. moby/moby#50176

패키징 업데이트

네트워킹

  • 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 prunedocker 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#6129
  • api/types/container 패키지의 ExecOptions.Detach가 폐기 예정이에요. 이 필드는 사용되지 않으며 향후 릴리스에서 제거될 예정이에요. moby/moby#50219
  • pkg/idtools 패키지의 IdentityMappingIdentity.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

패키징 업데이트

28.2.0

2025-05-28

이번 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.

📝 참고

RHEL 패키지는 현재 제공되지 않으며 추후 출시될 예정이에요.

새로운 기능

  • docker ps{{.Platform}} 포맷 옵션을 추가해서 컨테이너가 실행 중인 이미지의 플랫폼을 표시할 수 있게 됐어요. docker/cli#6042
  • docker run/create에서 -v/--volume 또는 --mount type=bind 옵션을 사용할 때 바인드 마운트 소스의 상대 경로(../)를 지원하게 됐어요. docker/cli#4966
  • CDI가 이제 기본적으로 활성화됐어요. moby/moby#49963
  • docker info에서 발견된 CDI 디바이스를 표시하도록 했어요. docker/cli#6078
  • docker 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-cacacert 옵션을 무시하던 문제를 수정했어요. 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

패키징 업데이트

네트워킹

  • 브리지 네트워크 옵션 "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#49982
  • GET /info에 이제 DiscoveredDevices 필드가 포함돼요. 이는 DeviceInfo 객체의 배열이며, 각 객체는 디바이스 드라이버가 발견한 디바이스에 대한 세부 정보를 제공해요. moby/moby#49980

Go SDK

  • api/types/container 패키지: ContainerState와 컨테이너 상태 상수를 추가했어요. moby/moby#49965
  • api/types/container 패키지: Summary.StateContainerState로 변경했어요. moby/moby#49991
  • api/types/container 패키지: 건강 상태 상수를 위한 HealthStatus 타입을 정의했어요. moby/moby#49876
  • api/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 응답의 BridgeNfIptablesBridgeNfIp6tables 필드는 API v1.48에서 폐기 예정이었고, API v1.50에서 생략됐어요. moby/moby#49904
  • errdefs 패키지: errdefs.FromStatusCode를 폐기 예정으로 처리했어요. containerd의 errhttp.ToNative를 사용하세요. moby/moby#50030

28.1.1

2025-04-18

이번 패치 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.

버그 수정 및 개선

  • dockerd-rootless-setuptool.shiptables 누락을 잘못 보고하던 문제를 수정했어요. moby/moby#49833
  • containerd 이미지 스토어: 크기가 0인 tar 헤더가 포함된 아카이브로 docker load를 사용할 때 발생할 수 있는 데몬 크래시를 수정했어요. moby/moby#49837

패키징 업데이트

네트워킹

  • 업스트림 DNS 서버를 찾지 못했을 때 컨테이너의 /etc/resolv.conf에 경고를 추가했어요. moby/moby#49827

28.1.0

2025-04-17

이번 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.

새로운 기능

  • docker buildx bake의 별칭으로 docker bake 하위 명령을 추가했어요. docker/cli#5947
  • 실험적: docker rundocker create에 새 --use-api-socket 플래그를 추가했어요. 컨테이너 내부에서 Docker 소켓에 접근하고 호스트의 자격 증명을 컨테이너와 공유할 수 있게 해줘요. docker/cli#5858
  • docker image inspect가 이제 멀티 플랫폼 이미지의 특정 플랫폼을 검사하는 --platform 플래그를 지원해요. docker/cli#5934

버그 수정 및 개선

  • 컨텍스트 이름에 대한 CLI 셸 완성을 추가했어요. docker/cli#6016
  • docker images --tree가 총 이미지 콘텐츠 크기에 비컨테이너 이미지 콘텐츠 크기를 포함하지 않던 문제를 수정했어요. docker/cli#6000
  • docker 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#5968
  • docker images --tree가 이제 기본적으로 untagged 및 dangling 이미지를 모두 숨겨요. docker/cli#5924
  • docker 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

패키징 업데이트

네트워킹

  • Swarm 컨테이너의 호스트 포트 매핑이 docker psdocker 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#49586
  • GET /info가 이제 데몬의 방화벽 구성 정보를 포함하는 FirewallBackend를 반환해요. moby/moby#49761

Go SDK

  • 최소 요구 Go 버전을 go1.23으로 업데이트했어요. docker/cli#5868
  • cli/command/context 패키지: JSON 출력에서 임시 ContextType 필드를 제거했어요. docker/cli#5981
  • client 패키지: 가능한 경우 이미지 참조를 정규 형식으로 유지하도록 했어요. moby/moby#49609

폐기 예정 사항

  • API: GET /info 응답의 RegistryConfig 구조체에서 폐기 예정이었던 AllowNondistributableArtifactsCIDRsAllowNondistributableArtifactsHostnames 필드가 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 runSTDOUT/STDERR을 조기에 자르던 문제를 수정했어요. docker/cli#5957

패키징 업데이트

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

패키징 업데이트

네트워킹

  • Linux 커널이 CONFIG_IP_NF_RAW를 지원하지 않는 시스템에서 Docker를 실행할 수 있게 해주는 환경 변수 DOCKER_INSECURE_NO_IPTABLES_RAW=1을 추가했어요. 활성화하면 Docker가 iptables raw 테이블에 규칙을 생성하지 않아요. 경고: 로컬 네트워크의 다른 호스트가 127.0.0.1에 게시된 포트라도 호스트 주소에 게시된 포트로 라우팅할 수 있게 되어 보안이 약화되므로 프로덕션 환경에서는 권장하지 않아요. 이 옵션은 Docker Engine 28.0.0에 도입된 일부 보안 강화를 우회해요. moby/moby#49621
  • 상위 인터페이스가 다운된 macvlan 네트워크 드라이버에 엔드포인트가 연결된 경우에도 컨테이너 시작을 허용했어요. moby/moby#49630
  • gateway_mode=routed 네트워크에서 시작된 패킷에 대해 DNAT를 건너뛰지 않도록 했어요. moby/moby#49577
  • docker ps가 이중 스택 포트 매핑을 일관되지 않게 보고하던 버그를 수정했어요. moby/moby#49657
  • docker-proxy가 UDP 데이터그램을 컨테이너로 전달하지 못할 수 있던 버그를 수정했어요. moby/moby#49649
  • docker-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#5916
  • runconfig/errors 패키지: ErrConflictHostNetworkErrConflictConnectToHostNetworkErrConflictDisconnectFromHostNetwork로 분리했어요. 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#5854
  • protocol "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

패키징 업데이트

API

  • containerd 이미지 스토어: GET /images/json?manifests=1이 인덱스 전용 이미지에 대해 Manifests를 채우지 않던 문제를 수정했어요. moby/moby#49533
  • containerd 이미지 스토어: GET /images/json/images/<name>/jsonSize.Content 필드에 로컬에서 사용할 수 없는 콘텐츠 크기가 포함되던 문제를 수정했어요. moby/moby#49535

28.0.0

2025-02-19

이번 메이저 릴리스의 자세한 변경사항은 GitHub 마일스톤에서 확인할 수 있어요.

새로운 기능

  • --mount type=image를 통해 컨테이너 내부에 이미지를 마운트하는 기능을 추가했어요. moby/moby#48798
  • 이미지에서 특정 경로를 마운트하려면 --mount type=image,image-subpath=[subpath],... 옵션을 지정할 수도 있어요. docker/cli#5755
  • docker images --tree가 이제 메타데이터 배지를 표시해요. docker/cli#5744
  • docker load, docker save, docker history가 이제 --platform 플래그를 지원해서 멀티 플랫폼 이미지에 대한 단일 플랫폼 작업 시 특정 플랫폼을 선택할 수 있어요. docker/cli#5331
  • docker service createdocker stackOOMScoreAdj를 추가했어요. docker/cli#5145
  • docker 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
  • 포트 게시 및 네트워크 격리를 구현하는 데 사용되는 iptablesip6tables 규칙이 대폭 수정됐어요. 이는 아래의 일부 기능 변경을 가능하게 하며, 향후 릴리스에서 네이티브 nftables 지원을 가능하게 하는 리팩토링의 첫 단계예요. moby/moby#48815
  • 이전 버전의 데몬으로 다운그레이드해야 한다면 새 규칙을 수동으로 정리해야 할 수 있어요. 가장 간단하고 확실한 방법은 호스트를 재부팅하거나, 이전 버전의 데몬을 시작하기 전에 iptables -Fip6tables -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 ACCEPT
  • iptables -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.forwardingnet.ipv6.conf.default.forwarding)을 활성화한 경우에만 filter 테이블의 FORWARD 체인에 대한 ip6tables 정책을 DROP으로 설정해요. 이는 기존 IPv4 동작과 일치하게 된 거예요. moby/moby#48594
  • 호스트에서 IPv6 포워딩이 활성화되어 있지만 Docker가 ip6tables filter-FORWARD 정책을 DROP으로 설정할 것에 의존하고 있었다면, 보안을 위해 호스트 구성을 업데이트해야 할 수 있어요.
  • p/-publish로 노출되지 않은 컨테이너 포트에 대한 직접 라우팅 접근이 이제 DOCKER iptables 체인에서 차단돼요. 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_ipv4com.docker.network.bridge.gateway_mode_ipv6이 이제 nat-unprotected 모드를 허용해요. moby/moby#48597
  • nat-unprotected는 기본 nat 모드와 유사하지만 포트/프로토콜별 규칙이 설정되지 않아요. 즉, 원격 호스트에서 직접 라우팅으로 컨테이너의 모든 포트에 접근할 수 있어요.
  • 브리지 드라이버 옵션 com.docker.network.bridge.gateway_mode_ipv4com.docker.network.bridge.gateway_mode_ipv6이 네트워크가 internal인 경우 isolated 모드를 허용해요. moby/moby#49262
  • 일반적으로 internal 네트워크의 브리지 디바이스에는 주소가 할당돼요. 따라서 Docker 호스트의 프로세스가 네트워크에 접근할 수 있고, 네트워크의 컨테이너는 해당 브리지 주소에서 수신 대기하는 호스트 서비스("모든" 호스트 주소, 0.0.0.0 또는 ::에서 수신 대기하는 서비스 포함)에 접근할 수 있어요.
  • 게이트웨이 모드가 isolatedinternal 브리지 네트워크는 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 공식 문서에서 확인할 수 있어요.