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

So definieren Sie Datenbeispiele in Vue

Vorwort Im Entwicklungsprozess ist das Definieren...

Eine kurze Diskussion über Flex-Layout und Skalierungsberechnung

1. Einführung in Flex Layout Flex ist die Abkürzu...

So ändern Sie die Server-UUID in MySQL

Quelle des Problems: Wenn der Slave-Server der ge...

Lernen Sie, benutzerdefinierte Hooks in React zu erstellen

1. Was sind benutzerdefinierte Hooks Wiederverwen...

Vergleichende Analyse von IN und Exists in MySQL-Anweisungen

Hintergrund Als ich kürzlich SQL-Anweisungen schr...

Einfache Verwendung des Vue-Busses

Einfache Verwendung des Vue-Busses Beschreibung d...

Die MySQL-Partitionstabelle ist nach Monaten klassifiziert

Inhaltsverzeichnis Erstellen einer Tabelle Zeigen...

Detaillierte Erläuterung des Linux-Befehls zur Änderung des Hostnamens

Linux-Befehl zum Ändern des Hostnamens 1. Wenn Si...

MySQL-Tutorial: Ausführliche Erklärung zum Unterabfragebeispiel

Inhaltsverzeichnis 1. Was ist eine Unterabfrage? ...

Detaillierte Erklärung zum Upgrade von Softwarepaketversionen unter Linux

Im Linux-Umfeld möchten Sie prüfen, ob eine besti...

Zusammenfassung gängiger SQL-Anweisungen in MySQL

1. MySQL-Exportdatei: SELECT `pe2e_user_to_compan...