VPN இயங்குகிறது, உலாவி உள் தளங்களை அடைகிறது, ஆனால் கொன்டெய்னரால் அதே பெயர்களை இன்னும் தீர்க்க முடியவில்லை. EAI_AGAIN போன்ற பெயர்-தீர்வுப் பிழையுடன் தொகுப்பு நிறுவல் இறக்கிறது, அல்லது ஹோஸ்ட் இயந்திரம் எந்தப் புகாரும் இல்லாமல் தீர்க்கும் தரவுத்தள ஹோஸ்ட்டை ஒரு பயன்பாடு கண்டுபிடிக்க முடியவில்லை. கொன்டெய்னர் VPN நிறுவிய தீர்வியைப் பயன்படுத்தவில்லை. கொன்டெய்னர் உருவாக்கப்பட்டபோது Docker ஹோஸ்ட்டின் தீர்வி உள்ளமைவை நகலெடுத்தது, அதன் பிறகு எதுவும் அதை மீண்டும் நகலெடுக்கவில்லை.

ஒரே இயந்திரத்தில் தீர்வியின் இரண்டு பார்வைகள்

Linux இல், உருவாக்கும் நேரத்தில் Docker ஒவ்வொரு கொன்டெய்னருக்கும் ஹோஸ்ட்டின் தீர்வி உள்ளமைவின் நகலை வழங்குகிறது, loopback முகவரிகளை வடிகட்டி, 127.0.0.11 இல் உள்ளமைக்கப்பட்ட DNS சேவையகத்தை இயக்குகிறது, அது வினவல்களை வெளியே அனுப்புகிறது. கொன்டெய்னர் தொடங்கிய பிறகு /etc/resolv.conf ஐ மீண்டும் எழுதும் VPN கிளையண்ட் அதன் உள்ளே எதையும் மாற்றாது. அந்த நேரத்தில் ஹோஸ்ட் தீர்வி தற்செயலாகச் சரியாக இருந்தால் மட்டுமே கொன்டெய்னரை மீண்டும் தொடங்குவது உதவும்.

macOS அல்லது Windows இல் Docker Desktop ஒரு அடுக்கைச் சேர்க்கிறது, ஏனெனில் டீமன் மெய்நிகர் இயந்திரத்தில் வாழ்கிறது. ஹோஸ்ட்டின் VPN தீர்வி அந்த VM க்கு ஒருபோதும் தெரியாமல் இருக்கலாம், எனவே மீண்டும் தொடங்குவது எதையும் மாற்றாது. ஒரு தீர்வைத் தேர்ந்தெடுப்பதற்கு முன் இரண்டு பார்வைகளையும் ஒப்பிடுங்கள்: ஹோஸ்ட்டின் தீர்வி பட்டியலுக்கு அருகில் docker exec mycontainer cat /etc/resolv.conf.

ஹோஸ்ட் உள் தீர்வியைப் பட்டியலிடும்போது கொன்டெய்னர் பொது தீர்வியைப் பட்டியலிட்டால், அது பொது பெயர்களைத் தீர்த்து உள் பெயர்களில் தோல்வியடையும். அந்தப் பிரிவே இந்தச் சிக்கலின் கையொப்பம்.

விருப்பம் A: ஒவ்வொரு கொன்டெய்னருக்கும் சுரங்கத் தீர்வியை அனுப்புதல்

Docker ஒவ்வொரு கொன்டெய்னருக்கும் DNS அமைப்புகளை ஏற்கிறது, அதுவே வேலை செய்யும் சிறிய மாற்றம். முதலில் VPN இன் தீர்வி முகவரிகளைப் படியுங்கள்: macOS இல் scutil --dns, Linux இல் resolvectl status அல்லது கிளையண்டின் சொந்த நிலை வெளியீடு. பின்னர் அவற்றுடன் கொன்டெய்னரைத் தொடங்குங்கள், எடுத்துக்காட்டாக docker run --dns 192.168.2.1 --dns 192.168.123.1 myimage. Compose இல் அதே அமைப்பு சேவையின் கீழ் ஒரு பட்டியல், அங்கு அது யாரோ ஒருவரின் shell வரலாற்றுக்குப் பதிலாக பதிப்புக் கட்டுப்பாட்டில் வாழ்கிறது.

/etc/docker/daemon.json இல் உள்ள dns வரிசை ஒவ்வொரு புதிய கொன்டெய்னருக்கும் பொருந்தும், இது மிகவும் ஒழுங்கானதாகத் தோன்றுகிறது, ஆனால் இல்லை. சுரங்கம் மூடப்பட்டிருக்கும்போதும் இது பொருந்தும், அப்போது VPN வழியாக மட்டுமே அணுகக்கூடிய தீர்வி சாதாரண இமேஜ் இழுப்பை உடைக்கிறது. ஒவ்வொரு கொன்டெய்னருக்குமான அமைப்புகளை நியாயப்படுத்தவும் திரும்பப் பெறவும் எளிது.

விருப்பம் B: கொன்டெய்னர் ஹோஸ்ட் வலையமைப்பைப் பகிரட்டும்

ஹோஸ்ட் வலையமைப்பு நகலை முழுவதுமாகத் தவிர்க்கிறது, ஏனெனில் கொன்டெய்னர் ஹோஸ்ட்டின் தீர்வியையும் ஹோஸ்ட்டின் சுரங்கத்தையும் பயன்படுத்துகிறது. இது நீங்கள் விரும்பிய வலையமைப்புத் தனிமையையும் நீக்குகிறது, மேலும் Docker Desktop இன் கீழ் அதேபோல் நடந்து கொள்ளாது. Linux இல் உள் பெயர்களைத் தீர்க்க வேண்டிய ஒரு-முறைக் கருவிக்கு இது நடைமுறைத் தேர்வு.

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

இரண்டு விருப்பங்களும் சரிசெய்யாதவை

கொன்டெய்னருக்கு அங்கு பாதை இல்லாவிட்டால் DNS முகவரி பயனற்றது. VPN தீர்வி பொதுவாக சுரங்கத்தின் முகவரி இடைவெளிக்குள் அமர்கிறது, எனவே கொன்டெய்னருக்கு அந்த முன்னொட்டுக்குப் பாதை தேவை. Docker இன் இயல்புநிலை பாலம் பொதுவாக ஹோஸ்ட் வழியாக வெளியே வழிமாற்றுகிறது, ஹோஸ்ட்டிடம் சுரங்கப் பாதை இருந்து அனுப்புதல் இயக்கப்பட்டிருந்தால் அது போதும். தனிப்பயன் பாலம் வலையமைப்புகள் தங்கள் சொந்த முகவரிக் குளங்களுடன் VPN துணைவலையத்துடன் மோதலாம், அப்போது வினவல்கள் முற்றிலும் வேறு இடத்துக்குச் செல்கின்றன.

தீர்வியை நீங்களே பிழைதிருத்துவதற்கு முன் Docker வலையமைப்பின் துணைவலையத்தை VPN துணைவலையத்துடன் சரிபார்க்கவும். ஒன்றின்மேல் ஒன்று படிதல் உடைந்த DNS சேவையகத்தைப் போலவே தோன்றும் தோல்வியை உருவாக்குகிறது.

கொன்டெய்னருக்குள் சரிபார்க்கவும்

உலாவி அல்லது மொழி இயக்கநேரத்திற்குப் பதிலாக கொன்டெய்னருக்குள் getent hosts db.internal மூலம் சோதிக்கவும், ஏனெனில் அவை தங்கள் சொந்த DNS கொள்கையையும் தங்கள் சொந்த தற்காலிகச் சேமிப்பையும் பயன்படுத்துகின்றன. getent பெயரைத் தீர்த்து பயன்பாடு இன்னும் தோல்வியடைந்தால், தீர்வி இப்போது சரியானது, மீதமுள்ள சிக்கல் பயன்பாட்டு மட்டத்தில் உள்ளது. அது தீர்க்கவில்லை என்றால், DNS படி முடிக்கப்படவில்லை.

DNS அமைப்புகளை மாற்றிய பிறகு கொன்டெய்னரை மீண்டும் உருவாக்கவும். இயங்கும் கொன்டெய்னருக்குள் /etc/resolv.conf ஐத் திருத்துவது அதனுடன் மறைந்துவிடும், மேலும் யாரோ அதை மீண்டும் தொடங்க எடுக்கும் நேரம் வரை உள்ளமைவுச் சிக்கலை மறைக்கிறது.

தொடர்புடைய கட்டுரைகள்