Setzen Sie die in einem Docker-Container angebrachte Sicherung frei

545
exussum

Ich versuche, ein Docker-Image für das Mounten von Hubic (Online-Speicher) auszuführen und dieses dem Host zur Verfügung zu stellen

Was bisher funktioniert, ist die korrekte Montage des Sicherungspunkts durch den Behälter (an /mnt/hubic).

Beim Ausführen von Docker versuche ich, mit einem zugeordneten Volume zu laufen, da /path/on/host:/mnt/hubicdies scheinbar funktioniert (dh Docker erstellt das Verzeichnis, wenn es nicht existiert), aber der Inhalt wird nie angezeigt. Wenn ich den Container eingebe, kann ich die Dateien vom Online-Speicher aus sehen, aber der Hostordner enthält nichts

Gibt es eine Option, die ich vermisse, damit das Docker dies zulässt?

Befehl, den ich zum Starten des Containers verwende

docker run -v ~/.hubicfuse:/root/.hubicfuse -v /tmp/mounted:/mnt/hubic --device /dev/fuse --cap-add SYS_ADMIN --security-opt apparmor:unconfined -it

1
@kamil Ich möchte die Dateien vom Host lesen. Verwenden eines freigegebenen Datenträgers Normalerweise können Sie in einem Container ein Verzeichnis von innen einhängen, um ein echtes Verzeichnis auf dem Host zu sein. Hoffen, dass dies auch mit einer Sicherung möglich ist exussum vor 5 Jahren 0
Lesen Sie [diese Antwort] (https://stackoverflow.com/a/43687970/165358) über die Verwendung des `: shared`-Flags, das möglicherweise auch für FUSE funktioniert. harrymc vor 5 Jahren 0
@harrymc das hat funktioniert! Kannst du es eine Antwort geben? exussum vor 5 Jahren 0
Erledigt wie gewünscht. harrymc vor 5 Jahren 1

1 Antwort auf die Frage

2
harrymc

Die Lösung stammt von dem im Container angebrachten Pfosten s3. Wie kann ich es dem Host aussetzen?

In diesem Beitrag wird eine Lösung beschrieben glusterFS, die mehr Berechtigungen für den Container erfordert. Der Docker-Befehl verwendet:

docker run --cap-add SYS_ADMIN --device fuse -v host_mount_dir:container_mount_dir:shared IMAGE COMMAND 

Bei einem Fehler wie "Pfad / foo ist auf / foo gemountet, aber kein gemeinsames Mount ...", liegt der Grund dafür, dass der Docker-Daemon in einem anderen Mount-Namespace als systemd ausgeführt wird. Dies ist die Lösung für die Ausführung im selben Namespace:

mkdir -p /etc/systemd/system/docker.service.d/ cat <<EOF > /etc/systemd/system/docker.service.d/clear_mount_propagation_flags.conf [Service] MountFlags=shared EOF 

Und starten Sie den Docker-Daemon neu.

Eine Bemerkung ist, dass der Mount auf dem Host sichtbar ist, wenn er in ein Verzeichnis eingebunden ist, das von gebunden ist -v.