GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Docker auf Ubuntu ausführen:Das gemountete Host-Volume kann nicht vom Container aus beschrieben werden

Wenn Ihr uid auf dem Host (id -u ) ist nicht dasselbe wie uid des Benutzers im Docker-Container (häufig "Docker"), dann kann dieses Problem auftreten. Sie können Folgendes versuchen:

  1. Identifizieren Sie die UIDs zwischen Ihrem Benutzer und dem Benutzer im Docker-Container.
  2. Setzen Sie die Gruppenberechtigungen für das Verzeichnis so, dass sie für eine Gruppe, der Sie und Docker angehören, beschreibbar sind.
  3. Sie können auch die nukleare Option verwenden:

chmod a+rwx -R project-dir/

Die nukleare Option macht Ihren git Arbeitsplatz verschmutzt, was Sie sehr ärgern wird, ist also nicht die beste langfristige Lösung. Es stoppt die Blutung.

Zum besseren Verständnis des Problems finden Sie möglicherweise Folgendes hilfreich:

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

Neue Antwort:

Diese Frage scheint viel Verkehr zu haben und es gibt jetzt eine bessere Lösung - fixuid, wie der Name schon sagt, ist es eine magische ausführbare Datei, um die UID und GID des Containerbenutzers beim Containerstart zu ändern (mit -u jemand:jemand).

Eine ausführlichere Erklärung finden Sie unter:https://boxboat.com/2017/07/25/fixuid-change-docker-container-uid-gid/

Alte Antwort:

Ab der Docker-Version 1.7 haben Sie die Möglichkeit, ein Host-Verzeichnis mit Berechtigungen in einen Container einzuhängen, indem Sie die Flags :Z oder :z wie folgt verwenden:

docker run -v ./api:/usr/src/app:Z
  • :z - fügt Berechtigungen zu allen Containern hinzu, die das Label 'svirt_sandbox_file_t' verwenden
  • :Z - fügt Berechtigungen nur dem aktuellen Container-Label hinzu

Ab docker-compose v1.4.0 können Sie es wie folgt in docker-compose verwenden:

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

Obwohl ich hinzufügen sollte, habe ich immer noch einige Probleme damit (siehe Hinzufügen von Berechtigungen zum Hostverzeichnis mit docker-compose).

Referenzen:

Die Verwendung von Volumes mit Docker kann Probleme mit SELinux verursachen – http://www.projectatomic.io/blog/2015/06/using-volumes-with-docker-can-cause-problems-with-selinux/

Docker-Benutzerhandbuch – https://docs.docker.com/engine/userguide/dockervolumes/#volume-labels

Docker-compose-Versionshinweise für v1.4.0 – https://github.com/docker/compose/releases/tag/1.4.0


Linux
  1. So greifen Sie vom Host auf den Netzwerk-Namespace des Docker-Containers zu

  2. Was befindet sich in einem Docker-Image/Container?

  3. Ein Fuse-basiertes Volume kann nicht für einen Docker-Container verfügbar gemacht werden

  4. Docker in Docker kann Volume nicht mounten

  5. Docker Volume stellt keine Dateien bereit

Upgrade von Ubuntu in Docker von 14.04 auf 16.04 mit Do-release-upgrade?

So erhalten Sie die IP-Adresse eines Docker-Containers vom Host

So erstellen Sie ein Docker-Image aus einem laufenden Container

gdb trifft keine Breakpoints, wenn ich es aus dem Docker-Container heraus starte

Docker aktualisiert Änderungen im Verzeichnis nicht

lsb_release:Befehl nicht im neuesten Ubuntu-Docker-Container gefunden