டோக்கர் சேமிப்பக இடம்பெயர்வு பிரச்சனையின் வரலாறு (டாக்கர் ரூட்)

இரண்டு நாட்களுக்கு முன்பு, ஒரு சேவையகங்களில் டோக்கர் சேமிப்பகத்தை (டாக்கர் அனைத்து கொள்கலன்கள் மற்றும் படக் கோப்புகளையும் சேமிக்கும் அடைவு) ஒரு தனிப் பகுதிக்கு மாற்ற முடிவு செய்யப்பட்டது.
அதிக திறன் கொண்டது. பணி அற்பமானதாகத் தோன்றியது மற்றும் சிக்கலை முன்னறிவிக்கவில்லை.

தொடங்குவோம்:

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 தவிர. கெர்பரோஸ் மற்றும் வேசிகளுடன் எங்கள் சொந்த nginx உருவாக்கம் உள்ளது. மற்றும் கொள்கலன் பதிவுகளைப் பார்க்கும்போது அது /var/tmp க்கு எழுத முடியாது என்பதைக் குறிக்கிறது - அனுமதி மறுக்கப்பட்டது. நான் என் கோயில்களை என் விரல்களால் பிசைந்து, நிலைமையை பகுப்பாய்வு செய்ய முயற்சிக்கிறேன் ... இது எப்படி சாத்தியம்? டோக்கர் படம் மாறவில்லை. நாங்கள் கோப்பகத்தை நகர்த்தினோம். இது எப்பொழுதும் வேலை செய்தது, இதோ உங்களுக்காக... பரிசோதனைக்காக, நான் என் கைகளால் கொள்கலனுக்குள் சென்று, இந்த கோப்பகத்தின் உரிமைகளை மாற்றினேன். வேர், ரூட் 755, கொடுத்தார் வேர், ரூட் 777. எல்லாம் தொடங்கியது ... ஒரு எண்ணம் என் தலையில் ஒலிக்கத் தொடங்கியது - ஒருவித முட்டாள்தனம் ... நான் நினைத்தேன், சரி, ஒருவேளை நான் எதையாவது கணக்கில் எடுத்துக்கொள்ளவில்லை ...

பரிமாற்றத்தின் போது கோப்புகளுக்கான அணுகல் உரிமைகளை நாங்கள் காதலிக்கிறோம் என்று முடிவு செய்தேன். நாங்கள் பயன்பாட்டை நிறுத்தினோம், டாக்கர் டீமான், புதிய கோப்பகத்தை நீக்கி, /var/lib/docker கோப்பகத்தைப் பயன்படுத்தி நகலெடுத்தோம் rsync -a.

இப்போது எல்லாம் சரியாகிவிட்டது என்று நினைக்கிறேன், டோக்கர் பயன்பாட்டை உயர்த்துவோம்.

Aaand ... பிரச்சினை இருந்தது ... என் கண் முறுக்கியது. நான் எனது மெய்நிகர் இயந்திரத்தின் பணியகத்திற்கு விரைந்தேன், அங்கு நான் பல்வேறு சோதனைகளை இயக்கினேன், நான் இந்த nginx படத்தை வைத்திருந்தேன், நான் கொள்கலனுக்குள் ஏறினேன், இங்கே /var/tmp கோப்பகத்திற்கான உரிமைகள் ரூட், ரூட் 777. அதாவது, நான் கைமுறையாக அமைக்க வேண்டும் அதே . ஆனால் படங்கள் ஒரே மாதிரியானவை!

xfs கோப்பு முறைமை எல்லா இடங்களிலும் பயன்படுத்தப்பட்டது.

கட்டளையைப் பயன்படுத்தி ஒப்பிட்டுப் பார்த்தேன்

docker inspect my-nginx:12345

அனைத்து ஹாஷ்களும் ஒரே மாதிரியானவை, அனைத்தும் ஒன்றுக்கு ஒன்று. சர்வரிலும் எனது மெய்நிகர் கணினியிலும். நான் உள்ளூர் nginx படத்தை நீக்கிவிட்டு, பதிவேட்டில் இருந்து மீண்டும் இழுத்தேன், இது பல காரணங்களுக்காக அதே கணினியில் உள்ளது. பிரச்சனையும் ஒன்றுதான்... இப்போது என் இரண்டாவது கண் நடுங்குகிறது.

"AAAAAAAAA" மற்றும் பிற விஷயங்களைத் தவிர, என் தலையில் என்ன எண்ணங்கள் இருந்தன என்பது எனக்கு இப்போது நினைவில் இல்லை. அது அதிகாலை 4 மணி, மேலும் பட அடுக்குகளை ஹாஷிங் செய்யும் கொள்கையைப் புரிந்துகொள்ள டோக்கர் மூலக் குறியீடு பயன்படுத்தப்பட்டது. மூன்றாவது ஆற்றல் பானத்தை திறந்தார். இறுதியில், ஹாஷிங் கோப்பு, அதன் உள்ளடக்கங்களை மட்டுமே கணக்கில் எடுத்துக்கொள்கிறது என்பது எனக்குப் புரிந்தது அணுகல் உரிமைகள் இல்லை! அதாவது, சில மர்மமான முறையில் நமது உரிமைகள் இழக்கப்பட்டுவிட்டன, selinux முடக்கப்பட்டுள்ளது, acl பயன்படுத்தப்படவில்லை, மேலும் ஒட்டும் பிட் எதுவும் இல்லை.

நான் உள்ளூர் படத்தை நீக்கிவிட்டேன், மேலும் டோக்கர் பதிவேட்டில் இருந்து படத்தை நீக்கிவிட்டு மீண்டும் தள்ளினேன். மற்றும் எல்லாம் வேலை செய்தன. பரிமாற்றத்தின் போது, ​​உள்ளூர் படத்திற்குள்ளும், பதிவேட்டில் உள்ள படத்திற்குள்ளும் உரிமைகள் இழக்கப்பட்டன. நான் ஏற்கனவே கூறியது போல், பல காரணங்களுக்காக அது ஒரே காரில் அமைந்துள்ளது. இதன் விளைவாக, ஒரு கோப்பகத்தில் /var/lib/docker.

டாக்கரின் பார்வையை பழைய கோப்பகத்திற்குத் திருப்ப முயன்றார்களா என்ற கேள்வியை எதிர்பார்த்து - இல்லை, அவர்கள் முயற்சிக்கவில்லை, ஐயோ, சூழ்நிலைகள் அதை அனுமதிக்கவில்லை. ஆம், நான் அதை கண்டுபிடிக்க விரும்பினேன்.

இந்த கட்டுரையை எழுதிய பிறகு, பிரச்சினைக்கான தீர்வு எனக்கு தெளிவாகத் தெரிகிறது, ஆனால் பகுப்பாய்வு நேரத்தில் அது அப்படித் தெரியவில்லை. நேர்மையாக, நான் கூகிள் செய்தேன், இதே போன்ற சூழ்நிலைகளைக் கண்டறியவில்லை.

முடிவு: நான் சிக்கலை தீர்த்துவிட்டேன், காரணம் எனக்கு இன்னும் புரியவில்லை =(

இந்த சிக்கலின் சாத்தியமான காரணங்களைப் பற்றி யாராவது அறிந்திருந்தால், யூகித்திருந்தால், கருத்துகளில் உங்களிடமிருந்து கேட்க நான் மிகவும் மகிழ்ச்சியடைவேன்!

ஆதாரம்: www.habr.com

கருத்தைச் சேர்