GNU/Linux >> Znalost Linux >  >> Linux

Spuštěný docker na Ubuntu:připojený svazek hostitele nelze zapisovat z kontejneru

Pokud je vaše uid na hostiteli (id -u ) není totéž jako uid uživatele v kontejneru dockeru (často „docker“), pak můžete mít tento problém. Můžete zkusit:

  1. Zajištění stejných UID mezi uživatelem a uživatelem v kontejneru dockeru.
  2. Nastavení skupinových oprávnění v adresáři tak, aby bylo možné zapisovat pro skupinu, do které patříte vy i docker.
  3. Můžete také použít jadernou možnost:

chmod a+rwx -R project-dir/

Nukleární možnost vytvoří váš git pracovní prostor špinavý, což vás bude velmi obtěžovat, takže to není nejlepší dlouhodobé řešení. Zastavuje krvácení.

Pro další pochopení problému mohou být užitečné tyto:

  1. https://github.com/docker/docker/issues/7906
  2. https://github.com/docker/docker/issues/7198

Nová odpověď:

Zdá se, že tyto otázky mají velký provoz a nyní je k dispozici lepší řešení - fixuid, jak název napovídá, že jde o magický spustitelný soubor ke změně uid a gid uživatele kontejneru při spuštění kontejneru (pomocí -u někdo:někdo).

Podrobnější vysvětlení viz:https://boxboat.com/2017/07/25/fixuid-change-docker-container-uid-gid/

Stará odpověď:

Od verze dockeru 1.7 máte možnost připojit hostitelský adresář s oprávněními ke kontejneru pomocí příznaků :Z nebo :z takto:

docker run -v ./api:/usr/src/app:Z
  • :z – přidá oprávnění ke všem kontejnerům pomocí štítku 'svirt_sandbox_file_t'
  • :Z – přidá oprávnění pouze k aktuálnímu štítku kontejneru

Od docker-compose v1.4.0 jej můžete použít v docker compose takto:

volumes:
   - ./api:/usr/src/app:Z

I když bych měl dodat, stále s tím mám nějaké problémy (viz Přidání oprávnění do hostitelského adresáře pomocí docker-compose).

Reference:

Používání svazků s Dockerem může způsobit problémy se SELinuxem - http://www.projectatomic.io/blog/2015/06/using-volumes-with-docker-can-cause-problems-with-selinux/

Uživatelská příručka Dockeru – https://docs.docker.com/engine/userguide/dockervolumes/#volume-labels

Poznámky k vydání Docker-compose pro verzi 1.4.0 – https://github.com/docker/compose/releases/tag/1.4.0


Linux
  1. Jak vytvořit vlastní obrázek z kontejneru Docker

  2. Jak získat přístup k síťovému jmennému prostoru Docker Container z hostitele

  3. Předat hostitelský port do kontejneru dockeru

  1. Co je uvnitř obrázku/kontejneru Dockeru?

  2. Nelze vystavit svazek založený na pojistce kontejneru Docker

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

  1. gdb nenarazí na žádné body přerušení, když jej spustím z kontejneru Docker

  2. Docker neaktualizuje změny v adresáři

  3. Jak zadat název hostitele pro běžící kontejner?