Docker - mounten von Netzwerkverzeichnissen

Donnerstag, März 16, 2017 by crypti

Für die Erstellung eines angepassten Yocto-Images für unsere Steuerung besteht die Idee, das auf einem Samba-Share vorhandene Git automatisch auszuchecken, zu bauen und in das FileSystem einzuspielen.
Für die Portabilität habe ich das Yocto-Build-System in einem Docker laufen.

Blauäugig wie ich bin, habe ich in die fstab des Docker-Containers einfach mal die entsprechenden Mountpoints angegeben und nach Installation des cifs-utils - Pakets versucht den SMB-Share mit mount.cifs /mountPoint entsprechend zu mounten. Egal was ich jedoch gemacht habe, immer kam :

mount error(1): Operation not permitted
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

Trotz diversen chmod’s (in diversen Foren gelesen) habe ich es jedoch nicht geschafft, das mount zum Laufen zu bekommen, bis ich darauf aufmerksam wurde, dass Docker in der Standard-Einstellung so etwas verbietet.

Dazu benötigt man entweder erweiterte Privilegien im Container bzw. die SYS_ADMIN - Rolle. Leider geht das nur beim erzeugen eines Containers aus einem Image über den run-Befehl, ein bestehender Container kann leider nicht mit den Rechten ausgestattet werden.

Nachdem dann also aus meinem Container über:

docker commit -a "Carsten Schunk" -m "irgendeine Beschreibung" <docker-id> <image-name>

nach ca. 3 Stunden ein Image erstellt worden ist, konnte ich anschließend aus dem Image wiederum einen Docker-Container mit erweiterten Rechten erstellen:

docker run -it --cap-add SYS_ADMIN --privileged <image-name> /bin/bash

Mit diesen erweiterten Rechten konnte man dann auch ein cifs-Dateisystem mounten. Hier sollte aber darauf geachtet werden, in den Mount-Optionen ein nofail einzubauen, ansonsten kann es sein, dass der Start des Containers sehr lange bzw. endlos dauert. I.d.R. wird der mount beim Start erfolglos sein, aber nach einem attach kann man das ja manuell machen.

Muss man erst mal wissen …