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

Detaillierte Schritte zum Debuggen von VUE-Projekten in IDEA

Um JS-Code zu debuggen, müssen Sie jedes Mal eine...

Eine kurze Diskussion über die Rolle von Vue3 defineComponent

Inhaltsverzeichnis defineComponent-Überladungsfun...

Standardzusammenfassung zur Analyse der Leistung einer SQL-Anweisung

In diesem Artikel wird die Verwendung von „Explai...

MySQL verwendet Aggregatfunktionen zum Abfragen einer einzelnen Tabelle

Aggregatfunktionen Wirkt auf einen Datensatz ein ...

Wie gut wissen Sie über die Vererbung in JavaScript?

Inhaltsverzeichnis Vorwort Die Beziehung zwischen...

Dieser Artikel zeigt Ihnen, wie Sie mit CSS-Kombinationsselektoren spielen

CSS-Kombinationsselektoren umfassen verschiedene ...

CSS3-Randeffekte

Was ist CSS? CSS (Abkürzung für Cascading Style S...

Der Prozess der schnellen Konvertierung eines MySQL-Left-Joins in einen Inner-Join

Während des täglichen Optimierungsprozesses stell...

XHTML-Erste-Schritte-Tutorial: Was ist XHTML?

Was ist HTML? Um es einfach auszudrücken: HTML wi...

Zwei Möglichkeiten zum Starten des Linux-Bootdienstes

Inhaltsverzeichnis rc.local-Methode chkconfig-Met...