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

Beispiele und Vergleich von 3 Methoden zur Deduplizierung von JS-Objekt-Arrays

Inhaltsverzeichnis 1. Vergleich der Daten vor und...

Detaillierte Erklärung zur Verwendung von MySQL-Gruppenlinks

Gruppieren und Verknüpfen sind in MySQL die beide...

Lösung für den Fehler 2059 beim Verbinden von Navicat mit MySQL

Als ich kürzlich Django lernte, musste ich eine D...

Schritte zum Übertragen des neuen Kernels auf das Linux-System

1. Laden Sie das Ubuntu16.04-Image und den entspr...

Detaillierte Installationsschritte für MySQL 8.0.11

In diesem Artikel werden die Installationsschritt...

js zur Implementierung der Kollisionserkennung

In diesem Artikelbeispiel wird der spezifische Co...

Beispiel für die Implementierung des TikTok-Textschütteleffekts mit CSS

In der täglichen Entwicklung streiten sich Front-...

So lösen Sie das Problem des Randkollapses in CSS

Betrachten wir zunächst drei Situationen, in dene...

RGB-Farbtabellensammlung

RGB-Farbtabelle Farbe Englischer Name RGB 16 Farb...

Das Homepage-Design spiegelt am besten das Niveau des Webdesigners wider

Bei den vielen Projekten, an denen ich mitgearbei...

CSS-Anfänger-Tutorial: Hintergrundbild füllt den gesamten Bildschirm

Wenn Sie möchten, dass die gesamte Benutzeroberfl...

Anwendung von CSS3-Animationseffekten in Aktivitätsseiten

Hintergrund Ehe wir uns versehen, neigt sich ein ...