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:
- Zajištění stejných UID mezi uživatelem a uživatelem v kontejneru dockeru.
- Nastavení skupinových oprávnění v adresáři tak, aby bylo možné zapisovat pro skupinu, do které patříte vy i docker.
- 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:
- https://github.com/docker/docker/issues/7906
- 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