Windows konteineris, kuriam reikia bendrinamo katalogo kitoje tunelio pusėje, nepavyksta dviem nepriklausomais būdais, ir host'o Explorer neįrodo nė vieno jų. Konteineris turi savo tinklo galinį tašką ir savo proceso tapatybę. Vardas, kuris išsprendžiamas darbalaukyje, ir sesija, kurią ten priima failų serveris, apibūdina darbalaukį, o ne darbo krūvį.

Host'o Explorer nėra įrodymas

Bendrinamo katalogo atidarymas host'e naudoja host'o DNS klientą, host'o maršrutizavimo lentelę ir paskyrą, kuria prisijungta prie host'o. Konteinerio procesas nieko iš to nepaveldi numanomai, net kai konteineris veikia toje pačioje mašinoje ir VPN klientas taip pat veikia ten. Pirmoji riba yra tinklo kelias: ar konteineris gali išspręsti vardą, ir ar gali atidaryti TCP sesiją į SMB prievadą. Antroji yra tapatybė: ar failų serveris priima tai, ką pateikia konteineris, su teisėmis, kurių reikia darbo krūviui.

Vertinant juos kaip vieną problemą, susidaro pažįstamas ciklas: plečiamos ugniasienės taisyklės, kad būtų ištaisyta tai, kas iš tikrųjų yra bendrinamo katalogo atsakymas apie uždraustą prieigą.

Sekite paties konteinerio užklausą

Windows konteinerių tinklą valdo Host Networking Service, kuri kuria galinius taškus su savo tinklo vardų erdve. Pasirinktas režimas nulemia, ar galinis taškas verčiamas, sujungiamas tiltu, ar prijungiamas prie tinklo, bendro su host'u. Šis sprendimas keičia du dalykus vienu metu: ką konteineris gali išspręsti ir kokį šaltinio adresą mato failų serveris.

Prieš ką nors keisdami patvirtinkite, ką stebi pats konteineris. Vardas, kuris išsprendžiamas lauke, gali nepavykti viduje, nes konteinerio DNS konfigūracija nėra host'o, o išverstas galinis taškas gali pateikti šaltinį, kurio failų serverio taisyklės nesitiki.

docker exec -it app powershell -Command "Resolve-DnsName files.corp.example"
docker exec -it app powershell -Command "Test-NetConnection files.corp.example -Port 445"
docker exec -it app powershell -Command "Get-NetIPConfiguration"

Jei skyrimas nepavyksta, taisykite DNS tinklo konfigūracijoje, o ne pakeiskite adresą. Vardo pakeitimas IP gali pakeisti autentifikavimo ir serverio tapatybės elgseną, o tai vieną problemą paverčia dviem. Toliau reikia patikrinti pačios VPN kliento politiką, nes ji gali skirtingai traktuoti host'o procesus ir eismą, kylantį iš konteinerio.

Tapatybė yra atskiras sprendimas

Interaktyvaus naudotojo priskirtas disko raidė nėra programos sąsaja. Ji egzistuoja vienoje prisijungimo sesijoje, o konteinerio procesas nėra jos dalis. Naudokite UNC kelią ir suteikite darbo krūviui tapatybę, kurią palaiko diegimo modelis. Kai domenas tai palaiko, grupinė tvarkoma paslaugos paskyra (gMSA) suteikia tvarkomą tapatybę per kredencialų specifikaciją.

Microsoft konteinerių gMSA vadove aprašoma ši kredencialų specifikacijos tvarka ir jos būtinosios sąlygos, įskaitant domeno narystę ir host'ą, galintį gauti kredencialus. Paskyra, gavimas, proceso tapatybė konteinerio viduje ir bendrinamo katalogo teisės turi visi sutapti. VPN prisijungimas nėra ta tapatybė, o slaptažodžio įkepimas į atvaizdį, siekiant atkurti host'o naudotojo sesiją, sukuria nuolatinį pavojų.

Išlaikykite nepavykstantį etapą matomą

Skyrimo nepavykimas, ryšio atmetimas ir prieigos atmetimas reikalauja skirtingų įrodymų. Tai atitinkamai DNS klausimas, maršrutizavimo ar filtravimo klausimas ir autentifikavimo ar teisių klausimas. Skaitykite atsakymą, kurį gavo konteineris, o ne bendrą programos klaidą.

Išbandykite su paties darbo krūvio tapatybe ir išbandykite atmetimą.

Planuokite prisijungimą iš naujo

VPN keliai nutrūksta. Kai tunelis grįžta, galinis taškas gali grįžti su kitu išverstu adresu, o esama SMB sesija gali būti mirusi, programai to nepastebint. Tvarkykite tai programoje: atkurkite kelią ir tapatybę, bandykite operaciją dar kartą ir suderinkite failo operaciją su nežinomu rezultatu, o ne manykite, kad nieko neatsitiko.

Užrašykite tinklo režimą, DNS šaltinį ir tapatybės tvarką diegimo pastabose. Būtent šie trys faktai bus kito nepavykimo tema.

Susiję straipsniai