Beheben Sie das Problem, dass beim Mounten von Dateien oder Verzeichnissen der relative Pfad ./ in Docker Run fehlschlägt

Beheben Sie das Problem, dass beim Mounten von Dateien oder Verzeichnissen der relative Pfad ./ in Docker Run fehlschlägt

Erlaube './' relative Pfade in docker-compose.yml-Dateien

Version: '3'
 ...
 Bände:
 - ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
 - ./mongo-volume:/data/db
 ...

Die Datei init-mongo.js im aktuellen Pfad wird im Container in /docker-entrypoint-initdb.d/init-mongo.js gemountet und in den schreibgeschützten Modus versetzt.

Das Verzeichnis mongo-volume unter dem aktuellen Pfad wird in den Container /data/db eingebunden. Wenn mongo-volume nicht existiert, wird das Verzeichnis automatisch erstellt.

Wenn es sich jedoch um einen Docker-Run handelt, können Sie den relativen Pfad nicht wie oben verwenden.

>>> docker run -d --restart always -p 27017-27019:27017-27019 -e MONGO_INITDB_DATABASE=job -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=root -v $PWD/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro -v ./mongo-volume:/data/db --name mein-mongo-container mongo
Docker: Fehlerantwort vom Daemon: create ./init-mongo.js: „./init-mongo.js“ enthält ungültige Zeichen für einen lokalen Datenträgernamen, nur „[a-zA-Z0-9][a-zA-Z0-9_.-]“ sind zulässig. Wenn Sie ein Hostverzeichnis übergeben möchten, verwenden Sie den absoluten Pfad.
Siehe „docker run --help“.

Sie müssen $PWD verwenden, um den Punkt „.“ zu ersetzen.

>>> docker run -d --restart always -p 27017-27019:27017-27019 -e MONGO_INITDB_DATABASE=job -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=root -v $PWD/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro -v $PWD/mongo-volume:/data/db --name mein-mongo-container mongo
3081e25a20fa8b2e95850897b3b32b08da298f73d7e458119fa3f2c85b45f020

Ergänzung: Docker -v hat keine Berechtigung für das gemountete Verzeichnis Permission denied

1. Problem

Als ich heute Docker zum Mounten von Redis verwendet habe, ist immer ein Fehler aufgetreten.

docker run -v /home/redis/redis.conf:/usr/local/etc/redis/redis.conf --name redis2 -p 6378:6379 redis redis-server /usr/local/etc/redis/redis.conf

Dann werden weiterhin Fehler gemeldet:

Schwerwiegender Fehler, Konfigurationsdatei „/usr/redis/redis.conf“ kann nicht geöffnet werden

2. Fehlerbehebungsprozess

Überprüfen Sie auch das Protokoll.

Dann habe ich den Ort entfernt, an dem die Konfigurationsdatei verwendet wurde

docker run -v /home/redis/redis.conf:/usr/local/etc/redis/redis.conf --name redis2 -p 6378:6379 redis

Dann betreten Sie den Container

docker exec -it redis2 /bin/bash

Gehen Sie dann in den gemounteten Ordner

cd /usr/local/etc/redis

Es wurde ein Fehler gefunden:

Verzeichnis „.“ kann nicht geöffnet werden: Berechtigung verweigert

Das heißt, keine Erlaubnis

3. Ursachen und Lösungen

3.1 Gründe

Das Sicherheitsmodul Selinux in CentOS7 hat deaktivierte Berechtigungen

3.2 Lösung

Es gibt drei Möglichkeiten, das Problem zu lösen:

1. Fügen Sie zur Laufzeit --privileged=true hinzu

docker run -v /home/redis/redis.conf:/usr/local/etc/redis/redis.conf --name redis2 --privileged=true redis redis-server /usr/local/etc/redis/redis.conf

2. Schalten Sie Selinux vorübergehend aus und dann wieder ein

[root@localhost tomcat]# setenforce 0
[root@localhost tomcat]# setenforce 1

3. Fügen Sie Linux-Regeln hinzu und fügen Sie das zu mountende Verzeichnis zur Selinux-Whitelist hinzu

Das Format zum Ändern des Sicherheitstextes ist wie folgt

chcon [-R] [-t Typ] [-u Benutzer] [-r Rolle] Datei oder Verzeichnis

Option ohne Parameter:

-R: Alle Verzeichnisse unter diesem Verzeichnis werden gleichzeitig geändert.

-t: gefolgt vom Typfeld des Sicherheitsdokuments, zum Beispiel httpd_sys_content_t;

-u: gefolgt von der Identitätsidentifizierung, zum Beispiel system_u;

-r: Die Farbe der folgenden Straße, zum Beispiel system_r

implementieren:

chcon -Rt svirt_sandbox_file_t /home/redis/redis.conf

4. Einige Erfahrungen mit dem Docker-Mounting

4.1 Das Containerverzeichnis darf kein relativer Pfad sein

4.2 Wenn das Hostverzeichnis nicht existiert, wird es automatisch generiert

4.3 Was ist, wenn das Hostverzeichnis ein relativer Pfad ist?

Die Antwort auf diese Frage erhalten wir, indem wir den Befehl „Docker Inspect“ verwenden und uns den Abschnitt „Mounts“ des Containers ansehen.

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • Docker-Dateispeicherpfad, Port-Mapping-Betriebsmodus ändern
  • Docker-Dateispeicherpfad, Befehlsvorgang zum Starten des Containers abrufen
  • Docker-Einstellung für den Windows-Speicherpfadvorgang

<<:  Beispiel für die Verwendung von CSS3 zum Anordnen von Elementen um einen Mittelpunkt

>>:  Analysieren der häufig verwendeten v-Anweisungen in vue.js

Artikel empfehlen

Umfassende Inventarisierung wichtiger Logdateien in MySQL

Inhaltsverzeichnis Einführung Protokollklassifizi...

Detaillierte Erklärung gängiger Vorlagenbefehle in docker-compose.yml-Dateien

Hinweis: Beim Schreiben der Datei docker-compose....

Tutorial zur Installation der komprimierten MySQL8-Paketversion unter Win10

1 Laden Sie MySQL8 von der offiziellen Website he...

Zusammenfassung der Blockelemente, Inline-Elemente und variablen Elemente

Blockelement p - Absatz Text vorformatieren Tisch ...

Spezifische Methode zum Anzeigen von Benutzerautorisierungsinformationen in MySQL

Spezifische Methode: 1. Öffnen Sie die Eingabeauf...

Einige weniger bekannte Sortiermethoden in MySQL

Vorwort ORDER BY 字段名升序/降序. Ich glaube, jeder hier...

So starten Sie ein Java-Programm im Docker

Erstellen Sie ein einfaches Spring Boot-Webprojek...

Warum sollten Sie mit der add_header-Direktive von Nginx vorsichtig sein?

Vorwort Wie wir alle wissen, legt die Nginx-Konfi...

Inhaltstypbeschreibung, d. h. der Typ des HTTP-Anforderungsheaders

Um den Inhaltstyp zu lernen, müssen Sie zunächst ...

Eine kurze Diskussion zum Problem von Daten mit Nullwerten in der MySQL-Datenbank

Standardmäßig akzeptiert MySQL das Einfügen von 0...