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 ఫైల్ను సవరించడం దానితో పాటు అదృశ్యమవుతుంది మరియు ఎవరైనా దాన్ని పునఃప్రారంభించడానికి పట్టే సమయం వరకు కాన్ఫిగరేషన్ సమస్యను దాచిపెడుతుంది.

సంబంధిత వ్యాసాలు