డాకర్ స్టోరేజ్ మైగ్రేషన్ సమస్య చరిత్ర (డాకర్ రూట్)

రెండు రోజుల క్రితం కాకుండా, డాకర్ నిల్వను (డాకర్ అన్ని కంటైనర్లు మరియు ఇమేజ్ ఫైల్‌లను నిల్వ చేసే డైరెక్టరీ) ప్రత్యేక విభాగానికి తరలించాలని సర్వర్‌లలో ఒకదానిపై నిర్ణయించారు, ఇది
ఎక్కువ సామర్థ్యం కలిగి ఉంది. పని అల్పమైనదిగా అనిపించింది మరియు ఇబ్బందిని ఊహించలేదు ...

మొదలు అవుతున్న:

1. మా అప్లికేషన్ యొక్క అన్ని కంటైనర్‌లను ఆపి చంపండి:

docker-compose down

చాలా కంటైనర్లు ఉంటే మరియు అవి వేర్వేరు కూర్పులలో ఉంటే, మీరు దీన్ని చేయవచ్చు:

docker rm -f $(docker ps -q)

2. డాకర్ డెమోన్‌ను ఆపండి:

systemctl stop docker

3. డైరెక్టరీని కావలసిన స్థానానికి తరలించండి:

cp -r /var/lib/docker /docker/data/storage

4. మేము కొత్త డైరెక్టరీలో చూడమని డాకర్ డెమోన్‌కి చెప్తాము. అనేక ఎంపికలు ఉన్నాయి: డెమోన్‌ను కొత్త మార్గానికి సూచించడానికి -g ఫ్లాగ్‌ని ఉపయోగించండి లేదా మేము ఉపయోగించిన systemd configsని ఉపయోగించండి. లేదా సిమ్‌లింక్. నేను దీని గురించి చాలా వివరంగా చెప్పను, ఇది ఇంటర్నెట్‌లో ఉంది. పూర్తి డాకర్ రూట్‌ను కొత్త స్థానానికి తరలించడంపై మాన్యువల్‌లు.

5. డాకర్ డెమోన్‌ని ప్రారంభించండి మరియు అది సరైన స్థలంలో కనిపిస్తోందని నిర్ధారించుకోండి:

systemctl status docker

అవుట్‌పుట్ లైన్‌లలో ఒకదానిలో మనం చూడాలి:

├─19493 /usr/bin/dockerd --data-root=/docker/data/storage

ఎంపిక డెమోన్‌కు పంపబడిందని మేము నిర్ధారించుకున్నాము, ఇప్పుడు అది వర్తింపజేయబడిందో లేదో చూద్దాం (ధన్యవాదాలు inkvizitor68sl)!

docker info | awk '/Root Dir/ {print $NF}' 

6. మన దరఖాస్తును ప్రారంభిద్దాం:

docker-compose up -d

7. తనిఖీ చేయండి

మరియు ఇక్కడ వినోదం ప్రారంభమవుతుంది, DBMS, MQ, అంతా బాగానే ఉంది! డేటాబేస్ చెక్కుచెదరకుండా ఉంది, ప్రతిదీ పనిచేస్తుంది... nginx తప్ప. మేము Kerberos మరియు వేశ్యలతో మా స్వంత nginx బిల్డ్‌ని కలిగి ఉన్నాము. మరియు కంటైనర్ లాగ్‌లను వీక్షించడం వలన అది /var/tmpకి వ్రాయలేమని సూచించింది - అనుమతి నిరాకరించబడింది. నేను నా వేళ్ళతో నా దేవాలయాలను పిసికి కలుపుతాను మరియు పరిస్థితిని విశ్లేషించడానికి ప్రయత్నిస్తాను ... ఇది ఎలా సాధ్యమవుతుంది? డాకర్ చిత్రం మారలేదు. మేము ఇప్పుడే డైరెక్టరీని తరలించాము. ఇది ఎల్లప్పుడూ పని చేస్తుంది మరియు ఇదిగో మీ కోసం... ప్రయోగం కోసం, నేను నా చేతులతో కంటైనర్‌లోకి వెళ్లి ఈ డైరెక్టరీకి హక్కులను మార్చాను, అక్కడ ఉన్నాయి రూట్, రూట్ 755, ఇచ్చారు రూట్, రూట్ 777. మరియు ప్రతిదీ ప్రారంభమైంది ... నా తలలో ఒక ఆలోచన ధ్వనించింది - ఒక రకమైన అర్ధంలేనిది ... నేను అనుకున్నాను, బాగా, నేను ఏదో పరిగణనలోకి తీసుకోలేదు ...

బదిలీ సమయంలో ఫైల్‌ల యాక్సెస్ హక్కులతో మేము ప్రేమలో పడ్డామని నేను నిర్ణయించుకున్నాను. మేము అప్లికేషన్‌ను ఆపివేసాము, డాకర్ డెమోన్, కొత్త డైరెక్టరీని తొలగించాము మరియు ఉపయోగించి /var/lib/docker డైరెక్టరీని కాపీ చేసాము rsync -a.

ఇప్పుడు అంతా బాగానే ఉందని నేను అనుకుంటున్నాను, డాకర్ అప్లికేషన్‌ను పెంచుదాం.

ఆఁ... సమస్య అలాగే ఉండిపోయింది.. నా కన్ను మెత్తబడింది. నేను నా వర్చువల్ మెషీన్ యొక్క కన్సోల్‌కి పరుగెత్తాను, అక్కడ నేను వివిధ పరీక్షలను నడుపుతున్నాను, నేను ఈ nginx ఇమేజ్‌ని కలిగి ఉన్నాను మరియు నేను కంటైనర్‌లోకి ఎక్కాను మరియు ఇక్కడ /var/tmp డైరెక్టరీకి హక్కులు రూట్, రూట్ 777. అంటే, ది నేను మాన్యువల్‌గా సెట్ చేయాల్సి వచ్చినట్లే. కానీ చిత్రాలు ఒకేలా ఉన్నాయి!

xfs ఫైల్ సిస్టమ్ ప్రతిచోటా ఉపయోగించబడింది.

నేను ఆదేశాన్ని ఉపయోగించి పోల్చాను

docker inspect my-nginx:12345

అన్ని హాష్‌లు ఒకేలా ఉంటాయి, అన్నీ ఒకదానికొకటి. సర్వర్‌లో మరియు నా వర్చువల్ మెషీన్‌లో రెండూ. నేను స్థానిక nginx చిత్రాన్ని తొలగించి, రిజిస్ట్రీ నుండి మళ్లీ తీసివేసాను, ఇది అనేక కారణాల వల్ల అదే మెషీన్‌లో ఉంది. ఇక సమస్య ఒకటే... ఇప్పుడు నా రెండో కన్ను కూడా కదులుతోంది.

“AAAAAAAAA” అని అరవడం మరియు ఇతర విషయాలు కాకుండా, నా తలలో ఏ ఆలోచనలు ఉన్నాయో నాకు ఇప్పుడు గుర్తులేదు. ఇది తెల్లవారుజామున 4 గంటలు, మరియు ఇమేజ్ లేయర్‌లను హ్యాషింగ్ చేసే సూత్రాన్ని అర్థం చేసుకోవడానికి డాకర్ సోర్స్ కోడ్ ఉపయోగించబడింది. మూడో డబ్బా ఎనర్జీ డ్రింక్ తెరిచాడు. మరియు చివరికి హ్యాషింగ్ ఫైల్, దాని కంటెంట్‌లను మాత్రమే పరిగణనలోకి తీసుకుంటుందని నాకు అర్థమైంది యాక్సెస్ హక్కులు కాదు! అంటే, కొన్ని రహస్యమైన రీతిలో మన హక్కులు పోయాయి, selinux నిలిపివేయబడింది, acl ఉపయోగించబడలేదు మరియు స్టిక్కీ బిట్ లేదు.

నేను స్థానిక చిత్రాన్ని తొలగించాను, డాకర్ రిజిస్ట్రీ నుండి చిత్రాన్ని కూడా తొలగించాను మరియు దానిని మళ్లీ నెట్టాను. మరియు ప్రతిదీ పనిచేసింది. బదిలీ సమయంలో స్థానిక చిత్రం లోపల మరియు రిజిస్ట్రీలో ఉన్న చిత్రం లోపల హక్కులు కోల్పోయినట్లు తేలింది. నేను ఇప్పటికే చెప్పినట్లుగా, అనేక కారణాల వల్ల ఇది ఒకే కారులో ఉంది. మరియు ఫలితంగా, ఒక డైరెక్టరీలో /var/lib/docker.

మరియు వారు పాత డైరెక్టరీకి డాకర్ చూపులను తిరిగి ఇవ్వడానికి ప్రయత్నించారా అనే ప్రశ్నను ఊహించడం - లేదు, వారు ప్రయత్నించలేదు, అయ్యో, పరిస్థితులు అనుమతించలేదు. అవును, మరియు నేను నిజంగా దాన్ని గుర్తించాలనుకుంటున్నాను.

ఈ వ్యాసం వ్రాసిన తరువాత, సమస్యకు పరిష్కారం నాకు స్పష్టంగా అనిపించింది, కానీ విశ్లేషణ సమయంలో అది అలా అనిపించలేదు. నిజం చెప్పాలంటే, నేను గూగుల్‌లో చూసాను మరియు ఇలాంటి పరిస్థితులు కనిపించలేదు.

ఫలితం: నేను సమస్యను పరిష్కరించాను, కారణం నాకు ఇంకా అర్థం కాలేదు =(

ఈ సమస్య యొక్క సాధ్యమైన కారణాల గురించి ఎవరికైనా తెలిస్తే, ఊహిస్తే, మీ దృష్టిని కలిగి ఉంటే, వ్యాఖ్యలలో మీ నుండి వినడానికి నేను చాలా సంతోషిస్తాను!

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి