Mae bron pob ysgrif am y broblem hon yn beio'r gyfrol, a dyna'n union pam mae'r atgyweiriad yn cymryd cymaint o amser. Roeddech wedi cael bind mount a oedd yn gweithio, cysylltodd y VPN corfforaethol, ac mae docker compose up nawr yn methu â llwybr ffynhonnell ar goll, cyfeiriadur gwag, neu fownt y mae'r peiriant yn gwrthod ei greu. Yn yr unedau rwyf wedi eu glanhau, nid oedd y ffeil Compose wedi newid ac roedd y llwybr yn gywir. Yr hyn a newidiodd oedd pa daemon a gafodd y cais, a dim ond y lle cyntaf lle daeth y gwahaniaeth hwnnw'n weladwy oedd y gwall mowntio.

Ni symudodd y gyfrol erioed; symudodd y cais

Nid yw'r fflag -v /srv/app:/app yn gopi cyfeiriadur a wneir gan eich shell. Mae'r cleient yn ei droi'n gais API, ac mae'r daemon sy'n ateb yn datrys /srv/app yn erbyn ei system ffeiliau ei hun. Pan fo'r ddwy ochr yn rhedeg ar yr un cnewyllyn, dyna'r llwybr a welwch yn eich rheolwr ffeiliau. Pan fo'r endpoint yn newid, chwiliwyd am yr un llinyn ar beiriant nad yw erioed wedi clywed am gyfeiriadur eich prosiect, ac mae'r daemon naill ai'n adrodd bod y ffynhonnell ar goll neu'n creu cyfeiriadur gwag yn ddistaw yn ei lle.

Dyma hefyd pam mae cyfrol enwir yn parhau i weithio tra nad yw bind mount yn gwneud. -v appdata:/app enwi storfa y mae'r daemon yn berchen arni, felly nid oes rhaid i unrhyw lwybr gwesteiwr fodoli yn unman penodol. Os yw newid un gwasanaeth o bind mount i gyfrol enwir yn gwneud i'r gwall ddiflannu, nid ydych wedi trwsio'r broblem. Rydych wedi cadarnhau bod y cleient a'r daemon yn anghytuno ynghylch pa system ffeiliau y mae'r llwybr yn perthyn iddi, ac mae'r anghytundeb hwnnw'n dychwelyd y funud y bydd angen cyfeiriadur gwesteiwr go iawn arnoch eto.

Printiwch yr endpoint cyn i chi gyffwrdd â'r mownt

Gall sawl gosodiad bwyntio'r cleient at endpoint, ac nid ydynt bob amser yn cytuno: y fflag --context , DOCKER_CONTEXT, DOCKER_HOST yn y shell presennol, a'r cyd-destun a gadwyd yng nghyfluniad y cleient. Yn hytrach na rhesymu am flaenoriaeth, printiwch bob un a chymharu'r atebion.

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

Mae cyfluniad y cleient i'w gael yn ~/.docker/config.json ar Linux a macOS ac yn %USERPROFILE%\.docker\config.json ar Windows, ac mae gwerth a allforiwyd yn y terminal presennol yn disodli'r un a gadwyd ar gyfer y sesiwn honno yn unig. Os mai enw gwesteiwr yw'r endpoint yn hytrach na soced lleol, datrysiad enwau a llwybrau sy'n penderfynu ble mae'n glanio, a dyna'n union y mae cleient VPN yn ei ailysgrifennu. Gall twnnel sy'n ychwanegu llwybr neu'n newid y datryswr anfon enw a oedd gynt yn golygu'r gliniadur hwn i gyfeiriad y tu mewn i'r rhwydwaith corfforaethol.

Cymharwch gyflwr yn hytrach na chyfluniad. Rhedwch docker ps -a a docker images gyda'r twnnel i lawr, ac yna eto gydag ef i fyny. Mae rhestr wahanol o gynwysyddion yn dystiolaeth gryfach nag unrhyw ffeil gyfluniad, oherwydd mae'n dangos bod daemon gwahanol wedi ateb eich cais.

Gofynnwch i'r daemon a yw'r llwybr yn bodoli yno

Unwaith y gwyddoch pa daemon y gwnaethoch gyrraedd, gwnewch iddo edrych ar y cyfeiriadur. Mae'r ffurf --mount yn methu â neges gliriach na'r fflag byr, oherwydd mae'n dilysu'r ffynhonnell cyn cychwyn y cynhwysydd:

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

Os yw'n adrodd bod y ffynhonnell ar goll, crëwch hi ar y peiriant a atebodd, neu bwyntiwch y gwasanaeth at gyfrol enwir a chopïwch y data i mewn. Yr hyn na ddylech ei wneud yw ail-greu cyfrolau ac ailosod y peiriant cyn y gwiriad hwn. Mae'r gweithredoedd hynny'n newid yr amgylchedd ddigon i guddio'r anghysondeb tra'n ei adael yn ei le.

Mae un llwybr arall yn rhedeg yn hollol wahanol: mae tynnu image yn waith daemon, nid gwaith cleient. Dim ond bod y daemon yn gallu cyrraedd registry y mae tynnu llwyddiannus yn ei brofi, a dim ond bod llwybr wedi'i ddatrys y mae bind mount sy'n gweithio yn ei brofi. Profwch bob llwybr lle mae'n gweithredu mewn gwirionedd, neu byddwch yn treulio prynhawn ar yr un anghywir.

Mae enwau intranet yn methu am reswm gwahanol

Yr ail hanner o'r un adroddiad yw fel arfer nad yw'r cynhwysydd yn gallu cyrraedd intranet.corp.example. Mae hwnnw'n fecanwaith ar wahân, nid yn ail broblem cyfrol. Mae cynhwysydd yn cael ei /etc/resolv.conf pan fydd yn cychwyn, wedi'i gynhyrchu o osodiadau datryswr y daemon, felly ni fydd gweinydd DNS a ychwanegodd y VPN ar ôl creu'r cynhwysydd yn ymddangos ynddo nes bod y cynhwysydd yn cael ei ail-greu.

Mae datryswr mewnol Docker ar rwydwaith a ddiffinnir gan y defnyddiwr yn anfon ymholiadau allanol at weinyddion cyfluniedig y gwesteiwr, sy'n helpu pan fydd y VPN yn ailysgrifennu datryswr y gwesteiwr ac yn brifo pan fydd DNS hollt yn anfon parth mewnol at weinydd nad yw'r daemon yn ei weld mwyach. Mae mapio cul, penodol yn osgoi'r ddadl ar gyfer enwau nad ydynt byth yn newid:

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

Mae hyn yn ysgrifennu cofnod yng nghefn hosts y cynhwysydd, felly nid yw'r cynhwysydd byth yn dysgu unrhyw beth am y twnnel, ac mae hefyd yn rhewi'r cyfeiriad. Pan fydd y gwesteiwr mewnol yn symud, mae'r cofnod yn aros yn anghywir nes bod rhywun yn golygu'r ffeil Compose. Defnyddiwch ef ar gyfer offeryn sefydlog neu gronfa ddata wedi'i phinio, a gadewch i DNS drin enwau sy'n symud.

Beth mae ailosodiad yn ei newid mewn gwirionedd

Mae ailosod Docker Desktop yn ail-greu'r VM, y soced a'r rhestr cyd-destunau, ac mae'r mownt yn dechrau gweithio eto. Mae'r canlyniad hwnnw'n real ac nid yw'n dysgu dim, a dyna pam mae'r un methiant yn dychwelyd ar ôl y diweddariad VPN nesaf. Disodlodd yr ailosodiad yr endpoint yr oedd y cleient yn ei ddefnyddio; ni wnaeth gysoni'r llwybr y mae eich prosiect yn ei enwi â'r system ffeiliau y mae'r daemon yn ei darllen mewn gwirionedd.

Mae fy nhrefn waith yn fyr. Cadarnhewch pa endpoint y bydd y cleient yn ei ddefnyddio. Cadarnhewch pa daemon a atebodd drwy gymharu rhestrau cynwysyddion. Gofynnwch i'r daemon hwnnw restru'r llwybr ffynhonnell. Dim ond wedyn golygwch y mownt, ychwanegwch gofnod hosts, neu newidiwch fath o gyfrol. Os ydych yn cynnal y ffeil Compose ar gyfer tîm sy'n gweithio dros VPN, ffafriwch gyfrolau enwir ar gyfer data y dylai'r daemon fod yn berchen arnynt, fel na fydd llwybr gwesteiwr byth yn dod yn rhan o'r contract.

Erthyglau cysylltiedig