VPN ਚਾਲੂ ਹੈ, ਬ੍ਰਾਊਜ਼ਰ ਅੰਦਰੂਨੀ ਸਾਈਟਾਂ ਤੱਕ ਪਹੁੰਚਦਾ ਹੈ, ਅਤੇ ਕੰਟੇਨਰ ਅਜੇ ਵੀ ਉਹੀ ਨਾਮ ਹੱਲ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਪੈਕੇਜ ਇੰਸਟਾਲ EAI_AGAIN ਵਰਗੀ ਨਾਮ-ਹੱਲ ਤਰੁੱਟੀ ਨਾਲ ਮਰ ਜਾਂਦਾ ਹੈ, ਜਾਂ ਕੋਈ ਐਪਲੀਕੇਸ਼ਨ ਉਹ ਡੇਟਾਬੇਸ ਹੋਸਟ ਨਹੀਂ ਲੱਭ ਸਕਦਾ ਜਿਸ ਨੂੰ ਹੋਸਟ ਮਸ਼ੀਨ ਕਿਸੇ ਸ਼ਿਕਾਇਤ ਤੋਂ ਬਿਨਾਂ ਹੱਲ ਕਰਦੀ ਹੈ। ਕੰਟੇਨਰ VPN ਵੱਲੋਂ ਇੰਸਟਾਲ ਕੀਤਾ ਰਿਜ਼ੋਲਵਰ ਨਹੀਂ ਵਰਤ ਰਿਹਾ। ਕੰਟੇਨਰ ਬਣਨ ਸਮੇਂ Docker ਨੇ ਹੋਸਟ ਦਾ ਰਿਜ਼ੋਲਵਰ ਕਨਫਿਗਰੇਸ਼ਨ ਕਾਪੀ ਕੀਤਾ, ਅਤੇ ਉਸ ਤੋਂ ਬਾਅਦ ਕਿਸੇ ਨੇ ਇਸ ਨੂੰ ਦੁਬਾਰਾ ਕਾਪੀ ਨਹੀਂ ਕੀਤਾ।

ਇੱਕ ਹੀ ਮਸ਼ੀਨ ਉੱਤੇ ਰਿਜ਼ੋਲਵਰ ਦੇ ਦੋ ਦ੍ਰਿਸ਼

Linux ਉੱਤੇ, Docker ਬਣਨ ਸਮੇਂ ਹਰ ਕੰਟੇਨਰ ਨੂੰ ਹੋਸਟ ਦੇ ਰਿਜ਼ੋਲਵਰ ਕਨਫਿਗਰੇਸ਼ਨ ਦੀ ਕਾਪੀ ਦਿੰਦਾ ਹੈ, ਲੂਪਬੈਕ ਪਤੇ ਫਿਲਟਰ ਕਰਦਾ ਹੈ, ਅਤੇ 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 ਵਿੱਚ ਉਹੀ ਸੈਟਿੰਗ ਸੇਵਾ ਦੇ ਹੇਠਾਂ ਸੂਚੀ ਹੈ, ਜਿੱਥੇ ਇਹ ਕਿਸੇ ਦੇ ਸ਼ੈੱਲ ਇਤਿਹਾਸ ਦੀ ਥਾਂ ਵਰਜ਼ਨ ਕੰਟਰੋਲ ਵਿੱਚ ਰਹਿੰਦੀ ਹੈ।

/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 ਸੋਧਣਾ ਉਸ ਨਾਲ ਹੀ ਗਾਇਬ ਹੋ ਜਾਂਦਾ ਹੈ ਅਤੇ ਕਨਫਿਗਰੇਸ਼ਨ ਸਮੱਸਿਆ ਨੂੰ ਉੱਨੀ ਹੀ ਦੇਰ ਲੁਕਾਉਂਦਾ ਹੈ ਜਿੰਨੀ ਦੇਰ ਵਿੱਚ ਕੋਈ ਇਸ ਨੂੰ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ।

ਸੰਬੰਧਿਤ ਲੇਖ