VPN inafanya kazi, kivinjari kinafika tovuti za ndani, na kontena bado haliwezi kutatua majina hayo hayo. Usakinishaji wa kifurushi hufa kwa hitilafu ya utatuzi wa jina kama EAI_AGAIN, au programu haipati mwenyeji wa hifadhidata ambaye mashine mwenyeji hutatua bila malalamiko yoyote. Kontena halitumii kitatuzi ambacho VPN ilisakinisha. Docker ilinakili usanidi wa kitatuzi cha mwenyeji wakati kontena liliundwa, na hakuna kilichoinakili tena baada ya hapo.

Mitazamo miwili ya kitatuzi kwenye mashine moja

Kwenye Linux, Docker huipa kila kontena nakala ya usanidi wa kitatuzi cha mwenyeji wakati wa kuundwa, huchuja anwani za loopback, na huendesha seva ya DNS iliyopachikwa kwenye 127.0.0.11 ambayo hupeleka maswali nje. Mteja wa VPN anayeandika upya /etc/resolv.conf baada ya kontena kuanza habadilishi chochote ndani yake. Kuanzisha upya kontena husaidia tu ikiwa kitatuzi cha mwenyeji kinatukia kuwa sahihi wakati huo.

Docker Desktop kwenye macOS au Windows huongeza tabaka, kwa sababu daemon huishi katika mashine pepe. Kitatuzi cha VPN cha mwenyeji kinaweza kamwe kisionekane kwa VM hiyo, kwa hiyo kuanzisha upya hakubadilishi chochote kabisa. Linganisha mitazamo hiyo miwili kabla ya kuchagua suluhisho: docker exec mycontainer cat /etc/resolv.conf kando ya orodha ya vitatuzi vya mwenyeji.

Kontena linaloorodhesha kitatuzi cha umma wakati mwenyeji anaorodhesha cha ndani litatatua majina ya umma na kushindwa kwa yale ya ndani. Mgawanyiko huo ni sahihi ya tatizo hili.

Chaguo A: kupeleka kitatuzi cha handaki kwa kila kontena

Docker hukubali mipangilio ya DNS kwa kila kontena, na hilo ni badiliko dogo zaidi linalofanya kazi. Kwanza soma anwani za kitatuzi cha VPN: scutil --dns kwenye macOS, resolvectl status au matokeo ya hali ya mteja mwenyewe kwenye Linux. Kisha anzisha kontena na hizo, kwa mfano docker run --dns 192.168.2.1 --dns 192.168.123.1 myimage. Kwenye Compose mpangilio huo huo ni orodha chini ya huduma, ambapo huishi katika udhibiti wa matoleo badala ya historia ya shell ya mtu.

Safu ya dns katika /etc/docker/daemon.json inatumika kwa kila kontena jipya, jambo ambalo linasikika kama nadhifu zaidi na si hivyo. Inatumika pia handaki linapokuwa limezimwa, na wakati huo kitatuzi kinachofikiwa tu kupitia VPN huvunja uvutaji wa picha wa kawaida. Mipangilio ya kila kontena ni rahisi kuhalalisha na rahisi kutendua.

Chaguo B: kuruhusu kontena kushiriki mtandao wa mwenyeji

Mtandao wa mwenyeji hukwepa nakala kabisa, kwa sababu kontena hutumia kitatuzi cha mwenyeji na handaki la mwenyeji. Pia huondoa utengano wa mtandao ambao pengine uliutaka, na haifanyi kazi kwa namna hiyo chini ya Docker Desktop. Kwenye Linux hilo ni chaguo la kiutendaji kwa chombo cha mara moja ambacho lazima kitatue majina ya ndani.

Kwa ujenzi hakuna chaguo lolote linalotumika, kwa sababu hatua za ujenzi hazirithi bendera za wakati wa utekelezaji. Jenga kwa mtandao wa mwenyeji pale jukwaa linapoliruhusu, au weka usakinishaji wa vitegemezi katika hatua isiyohitaji handaki.

Kile ambacho hakuna chaguo linalotengeneza

Anwani ya DNS haina maana ikiwa kontena halina njia kuelekea kwake. Kitatuzi cha VPN kwa kawaida hukaa ndani ya nafasi ya anwani ya handaki, kwa hiyo kontena linahitaji njia kuelekea kiambishi hicho. Daraja la chaguo-msingi la Docker kwa kawaida huelekeza nje kupitia mwenyeji, na hilo linatosha wakati mwenyeji ana njia ya handaki na upelekaji umewezeshwa. Mitandao maalum ya daraja yenye madimbwi yake ya anwani inaweza kugongana na subneti ya VPN, na wakati huo maswali huenda mahali pengine kabisa.

Kagua subneti ya mtandao wa Docker dhidi ya subneti ya VPN kabla ya kutatua kitatuzi chenyewe. Mwingiliano huzalisha hitilafu inayofanana kabisa na seva ya DNS iliyovunjika.

Hakiki ndani ya kontena

Jaribu kwa getent hosts db.internal ndani ya kontena badala ya kivinjari au mazingira ya utekelezaji ya lugha, kwa sababu hayo hutumia sera yao ya DNS na akiba yao wenyewe. Ikiwa getent inatatua jina na programu bado inashindwa, kitatuzi sasa ni sahihi na tatizo lililobaki ni la ngazi ya programu. Ikiwa haitatui, hatua ya DNS haijakamilika.

Unda upya kontena baada ya kubadilisha mipangilio yake ya DNS. Kuhariri /etc/resolv.conf ndani ya kontena linaloendesha hupotea pamoja nalo na huficha tatizo la usanidi kwa muda ambao mtu anahitaji kulianzisha upya.

Makala zinazohusiana