적절한 업그레이드 후 docker를 시작할 수 없습니다(커뮤니티 버전)

적절한 업그레이드 후 docker를 시작할 수 없습니다(커뮤니티 버전)

docker-cepygrub을 사용하여 XEN의 가상 머신 내부에서 Debian 10을 업데이트했습니다 .

업그레이드 후 Debian 11로 업그레이드했지만 오류가 계속 발생합니다.

현재 docker-ce 버전 5:23.0.0-1~debian.11~bullseye를 사용하고 있으며 데몬을 다시 시작하려고 하면 다음 오류 메시지가 나타납니다.

Starting Docker Application Container Engine...
level=warning msg="failed to rename /var/lib/docker/tmp for background deletion: rename /var/lib/docker/tmp /var/lib/docker/tmp-old: file exists. Del
eting synchronously" [Channel #1] Channel created" module=grpc                                                                                     
[Channel #1] original dial target is: \"unix:///run/containerd/containerd.sock\"" module=grpc                                 
[Channel #1] parsed dial target is: {Scheme:unix Authority: Endpoint:run/containerd/containerd.sock URL:{Scheme:unix Opaque: U
ser: Host: Path:/run/containerd/containerd.sock RawPath: OmitHost:false ForceQuery:false RawQuery: Fragment: RawFragment:}}" module=grpc [Channel #1] Channel authority set to \"localhost\"" module=grpc                                                              
[Channel #1] Resolver state updated: {\n  \"Addresses\": [\n    {\n      \"Addr\": \"/run/containerd/containerd.sock\",\n \"ServerName\": \"\",\n      \"Attributes\": {},\n      \"BalancerAttributes\": null,\n      \"Type\": 0,\n      \"Metadata\": null\n    }\n  ],\n  \"ServiceConfig\": null,\n  \"Attributes\": null\n} (resolver returned new addresses)" module=grpc [Channel #1] Channel switches to new LB policy \"pick_first\"" module=grpc
[Channel #1 SubChannel #2] Subchannel created" module=grpc                                                           [8/13043]
[Channel #1 SubChannel #2] Subchannel Connectivity change to CONNECTING" module=grpc                                          
[Channel #1 SubChannel #2] Subchannel picks a new address \"/run/containerd/containerd.sock\" to connect" module=grpc         
[Channel #1] Channel Connectivity change to CONNECTING" module=grpc                                                           
[Channel #1 SubChannel #2] Subchannel Connectivity change to READY" module=grpc                                               
[Channel #1] Channel Connectivity change to READY" module=grpc                                                                
[Channel #4] Channel created" module=grpc                                                                                     
[Channel #4] original dial target is: \"unix:///run/containerd/containerd.sock\"" module=grpc                                 
[Channel #4] parsed dial target is: {Scheme:unix Authority: Endpoint:run/containerd/containerd.sock URL:{Scheme:unix Opaque: $
ser: Host: Path:/run/containerd/containerd.sock RawPath: OmitHost:false ForceQuery:false RawQuery: Fragment: RawFragment:}}" module=grpc                                                                                            
[Channel #4] Channel authority set to \"localhost\"" module=grpc
[Channel #4] Resolver state updated: {\n  \"Addresses\": [\n    {\n      \"Addr\": \"/run/containerd/containerd.sock\",\n
 \"ServerName\": \"\",\n      \"Attributes\": {},\n      \"BalancerAttributes\": null,\n      \"Type\": 0,\n      \"Metadata\": null\n    }\n  ],\n  \"ServiceConfig\": null,\n  \"Attributes\": null\n} (resolver returned new addr$
sses)" module=grpc
[Channel #4] Channel switches to new LB policy \"pick_first\"" module=grpc
[Channel #4 SubChannel #5] Subchannel created" module=grpc
[Channel #4 SubChannel #5] Subchannel Connectivity change to CONNECTING" module=grpc
[Channel #4 SubChannel #5] Subchannel picks a new address \"/run/containerd/containerd.sock\" to connect" module=grpc
[Channel #4] Channel Connectivity change to CONNECTING" module=grpc
[Channel #4 SubChannel #5] Subchannel Connectivity change to READY" module=grpc
[Channel #4] Channel Connectivity change to READY" module=grpc
level=warning msg="Usage of loopback devices is strongly discouraged for production use. Please use `--storage-opt dm.thinpooldev` or use `man docked` to refer to dm.thinpooldev section." storage-driver=devicemapper
level=warning msg="Base device already exists and has filesystem ext4 on it. User specified filesystem  will be ignored." storage-driver=devicemapper
level=error msg="[graphdriver] prior storage driver devicemapper is deprecated and will be removed in a future release; update the the daemon configuration and explicitly choose this storage driver to continue using it; visit https://docs.docker.com/go/storage-driver/ for more information"
[Channel #1] Channel Connectivity change to SHUTDOWN" module=grpc
[Channel #1 SubChannel #2] Subchannel Connectivity change to SHUTDOWN" module=grpc
[Channel #1 SubChannel #2] Subchannel deleted" module=grpc
[Channel #1] Channel deleted" module=grpc
failed to start daemon: error initializing graphdriver: prior storage driver devicemapper is deprecated and will be removed in a future release; update the the daemon configuration and explic$
tly choose this storage driver to continue using it; visit https://docs.docker.com/go/storage-driver/ for more information

여기서 주요 오류 메시지는 무엇입니까? 나는 추측한다:

스토리지 드라이버 devicemapper는 더 이상 사용되지 않습니다.

다음과 같이 추가하기 위해 편집을 시도했습니다 /lib/systemd/system/docker.service.--storage-opt dm.thinpooldev

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --storage-opt dm.thinpooldev

그런 다음 호출했지만 systemctl daemon-reload도움이 되지 않았습니다. --storage-opt dm.thinpooldevDocker Community Edition(CE) 버전 5:23.0.0-1은 이 옵션을 지원하지 않는 것 같습니다.

답변1

스토리지 드라이버는 devicemapper마지막 업데이트에서 더 이상 사용되지 않으며 비활성화되었습니다. 스토리지 드라이버를 overlay2.

파일을 열고 /etc/docker/daemon.json(또는 파일이 없으면 생성) 다음 JSON 문자열을 추가합니다.

{
  "storage-driver": "overlay2"
}

그런 다음 도커를 다시 시작하십시오.

systemctl restart docker

주목! 기존 컨테이너는 스토리지 드라이버 변경 사항을 유지할 수 없으므로 docker-compose새 드라이버로 컨테이너를 다시 빌드하는 모든 파일을 다시 실행해야 합니다.

답변2

나는 이 길을 가지 않아서 이 길로 갔다.테스트되지 않은. 이것이 효과가 있다면 여기에서 피드백을 보내주세요.

내부에 볼륨으로 마운트되지 않은 데이터가 있어 이전 컨테이너가 절실히 필요한 경우 서비스 파일에서 이전 스토리지 드라이버를 다시 활성화할 수 있습니다./lib/systemd/system/docker.service

ExecStart줄을 변경 하고 --storage-driver devicemapper예를 들어 다음을 추가합니다.

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --storage-driver devicemapper

그 다음에

systemctl daemon-reload; systemctl restart docker

관련 정보