Bal all Beschreiwung vun dësem Problem beschëllegt de Volume, an dat ass genee firwat d'Reparatur sou laang dauert. Dir hat en Bind Mount deen funktionéiert huet, de Firmen-VPN huet sech verbonnen, an docker compose up schléit elo fehl mat engem fehlenden Quellwee, engem eidele Verzeechnes oder engem Mount, deen de Motor refuséiert ze schafen. An den Ëmfeld, déi ech opgerummen hunn, war d'Compose-Datei net geännert an de Wee war richteg. Wat sech geännert huet, war wéi en Daemon d'Ufro krut, an de Mount-Fehler war just déi éischt Plaz wou dësen Ënnerscheed sichtbar gouf.

De Volume huet sech ni beweegt; d'Ufro huet sech beweegt

E -v /srv/app:/app Flag ass keng Verzeechneskopie déi är Shell mécht. De Client mécht eng API-Ufro draus, an den Daemon deen äntwert léist /srv/app géint säin eegene Dateisystem op. Wa béid Säiten op demselwe Kernel lafen, ass dat de Wee deen Dir am Dateimanager gesitt. Wann den Endpoint sech ännert, gëtt dee selwechte String op enger Maschinn gesicht déi nach ni vun Ärem Projetverzeechnes héieren huet, an den Daemon mellt d'Quell als fehlend oder schaaft roueg en eidelt Verzeechnes op hirer Plaz.

Dat ass och firwat en benannte Volume weider funktionéiert wärend e Bind Mount et net mécht. -v appdata:/app benennt Späicher deen den Daemon besëtzt, also muss kee Host-Wee iergendwou bestoen. Wann engem Service vu Bind Mount op benannte Volume ëmstellen de Fehler verschwënne léisst, hutt Dir de Problem net gefléckt. Dir hutt bestätegt datt de Client an den Daemon sech net eens sinn, wéi engem Dateisystem de Wee gehéiert, an dës Oneneegkeet kënnt zeréck an deem Moment wou Dir nees en richtege Host-Verzeechnes braucht.

Dréckt den Endpoint ier Dir de Mount beréiert

Verschidden Astellunge kënnen de Client op en Endpoint weisen, an si sinn net ëmmer eens: e --context Flag, DOCKER_CONTEXT, DOCKER_HOST an der aktueller Shell, an de Kontext deen an der Client-Konfiguratioun gespäichert ass. Amplaz iwwer Prioritéit ze denken, dréckt se all a vergläicht d'Äntwerten.

docker context show
docker context ls
docker version
docker info --format "{{.Name}} {{.OperatingSystem}} {{.ServerVersion}}"

D'Client-Konfiguratioun ass an ~/.docker/config.json op Linux an macOS an an %USERPROFILE%\.docker\config.json op Windows, an e Wäert deen am aktuellen Terminal exportéiert gëtt iwwerschreift de gespäicherten nëmme fir déi Sessioun. Wann den Endpoint en Hostnumm ass amplaz vun engem lokale Socket, entscheeden Nummopléisung a Routen wou en landt, an dat ass genee wat e VPN-Client ëmschreift. En Tunnel deen eng Route bäisetzt oder den Resolver austauscht ka en Numm dee fréier dëse Laptop gemengt huet un eng Adress bannent dem Firmennetz schécken.

Vergläicht den Zoustand amplaz d'Konfiguratioun. Fuert docker ps -a an docker images mat dem Tunnel zou, duerno nees mat him op. Eng aner Lëscht vu Containeren ass méi staarkt Beweis wéi all Konfiguratiounsdatei, well se weist datt en aneren Daemon Är Ufro beäntwert huet.

Frot den Daemon ob de Wee do existéiert

Wann Dir wësst wéi en Daemon Dir erreecht hutt, loosst en an d'Verzeechnes kucken. D'Form --mount schléit mat enger méi kloerer Noriicht fehl wéi de kuerze Flag, well se d'Quell validéiert ier se de Container start.

docker run --rm --mount type=bind,source=/srv/app,target=/app alpine ls -la /app

Wann se d'Quell als fehlend mëllt, schaaft se op der Maschinn déi geäntwert huet, oder weist de Service op e benannte Volume an kopéiert d'Donnéeën dohinner. Wat Dir net sollt maachen ass Volumen nei schafen an de Motor nei installéieren ier dës Kontroll. Dës Aktiounen änneren d'Ëmfeld genuch fir den Ënnerscheed ze verstoppen an en trotzdem op senger Plaz ze loossen.

Nach ee Wee leeft ganz anzwousch anescht: en Image ze zéien ass Daemon-Aarbecht, net Client-Aarbecht. En erfollegräicht Zéien beweist nëmmen datt den Daemon e Registry erreecht, an e funktionéierende Bind Mount nëmmen datt e Wee opgeléist gouf. Test all Wee do wou en tatsächlech ausgefouert gëtt, soss verbréngt Dir en Nomëtteg mam falschen.

Intranet-Nimm schléien aus engem anere Grond fehl

Déi zweet Halschent vum selwechte Bericht ass meeschtens datt de Container net intranet.corp.exampleerreecht. Dat ass en separate Mechanismus, keen zweete Volume-Problem. E Container kritt säin /etc/resolv.conf beim Start, aus den Resolver-Astellunge vum Daemon generéiert, also en DNS-Server deen de VPN nom Erschafe vum Container bäigesat huet erschéngt do net bis de Container nei erschafe gëtt.

Den agebaute Resolver vun Docker op engem Benotzer-definéierte Netz leet extern Ufroen un d'konfiguréiert Serveren vum Host weider, wat hëlleft wann de VPN den Host-Resolvers ëmschreift an a schuet wann opgedeelte DNS eng intern Zone un e Server schéckt deen den Daemon net méi gesäit. Eng enk, explizit Kartéierung ëmgeet d'Diskussioun fir Nimm déi ni änneren:

services:
  web:
    extra_hosts:
      - "intranet.corp.example:10.20.30.40"

Dëst schreift en Agang an d'hosts-Datei vum Container, also léiert de Container näischt iwwer den Tunnel, an et fréiert och d'Adress an. Wann den internen Host sech beweegt, bleift den Agang falsch bis een d'Compose-Datei ännert. Benotzt en fir en fixen Apparat oder eng festgehalen Datebank, a loosst DNS d'Nimm déi sech beweegen handhaben.

Wat eng Neuinstallatioun tatsächlech ännert

D'Neuinstallatioun vun Docker Desktop schaaft d'VM, de Socket an d'Kontextlëscht nei, an de Mount fänkt nees un ze funktionéieren. Dëst Resultat ass real an et léiert näischt, dofir kënnt dee selwechte Fehler nom nächsten VPN-Update zeréck. D'Neuinstallatioun huet den Endpoint ersat deen de Client benotzt huet; se huet de Wee deen Äre Projet nennt net mat dem Dateisystem versöhnt deen den Daemon tatsächlech liest.

Meng Aarbechtsuerdnung ass kuerz. Bestätegt wéi en Endpoint de Client wäert benotzen. Bestätegt wéi en Daemon geäntwert huet andeems Dir Containerlëschten vergläicht. Frot deen Daemon de Quellwee opzelëschten. Eréischt duerno ännert de Mount, setzt en hosts-Agang bäi oder ännert en Volume-Typ. Wann Dir d'Compose-Datei fir en Team ënnerhalt deen iwwer e VPN schafft, favoriséiert benannt Volumen fir Donnéeën déi den Daemon soll besëtzen, sou datt en Host-Wee ni en Deel vum Kontrakt gëtt.

Ähnlech Artikelen