GNU/Linux >> Znalost Linux >  >> Linux

Jediný souborový svazek připojený jako adresář v Dockeru

test je název vašeho obrázku, který jste vytvořili pomocí 'docker build -t test ', nikoli /test složka.

Zkuste Dockerfile s:

CMD ["ls", "-lah", "/"]
or
CMD ["cat", "/file.json"]

A:

docker run --rm -it -v $(pwd)/file.json:/file.json test

Všimněte si použití $(pwd) za účelem připojení souboru s jeho úplnou absolutní cestou (relativní cesty nejsou podporovány)

Pomocí $(pwd) , získáte absolutní cestu, která existuje, a respektujte velikost písmen, na rozdíl od názvu souboru nebo cesty, která nemusí existovat.
Neexistující cesta hostitele by byla připojena jako složka v kontejneru.


Možná je to z odpovědí výše jasné... ale v mém případě mi nějakou dobu trvalo, než jsem na to přišel.

Základním důvodem, proč se soubor sdílený s -v zobrazuje jako adresář místo souboru, je ten, že Docker nemohl najít soubor na hostiteli. Docker tedy v kontejneru vytvoří nový adresář s názvem názvu neexistujícího souboru na hostiteli, protože si docker myslí, že uživatel chce pouze sdílet svazek/adresář, který bude vytvořen v budoucnu.

Takže ve výše uvedeném problému, pokud jste použili relativní adresář v příkazu -v a docker nerozumí relativním adresářům, znamená to, že soubor nebyl nalezen na hostiteli, a tak docker vytvořil adresář. A výše uvedená odpověď, která navrhuje použít $(pwd), bude správným řešením, když je problém způsoben relativním adresářem.

Ale pro ty, kdo čtou tuto stránku, kteří nepoužívají relativní adresář a mají stejný problém... zkuste pochopit, proč soubor na hostiteli chybí.

Může to být jen hloupý překlep...

Je možné, že spouštíte příkaz „docker run“ z klienta, který vytvoří kontejner dockeru na jiném hostiteli a sdílený soubor na tomto jiném hostiteli neexistuje. Soubor sdílený s -v musí existovat na hostiteli, kde agent docker vytvoří kontejner... ne nutně na klientovi, kde se provádí příkaz "docker run -v ..." (ačkoli budou stejné v mnoho případů).

Výše jsou další možná vysvětlení pro Mac a Windows... to by také mohlo být.

Problém je tedy v tom, že v hostiteli chybí soubor... vyřešte problém ve svém nastavení... řešením může být použití $(pwd), ale ne vždy.


Linux
  1. Přidání swapového svazku?

  2. Pochopení svazků Docker

  3. Jak připojit nebo symbolicky propojit jeden soubor v kontejneru Docker

  1. Cheat sheet pro oprávnění k souborům/adresáři pro Linux

  2. Odeberte symbolický odkaz na adresář

  3. Otevření souboru .tar.gz jediným příkazem

  1. Získejte nejnovější soubor v adresáři v systému Linux

  2. Jak RSYNC jeden soubor?

  3. Docker v Dockeru nemůže připojit svazek