Ich habe einen Docker mit Version 17.06.0-ce
. Wenn ich versuche, NGINX mit Docker mit Befehl zu installieren:
docker run -p 80:80 -p 8080:8080 --name nginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs -d nginx:latest
Es zeigt, dass
Docker: Fehlerantwort vom Daemon: OCI-Laufzeitfehler: Container_linux.go: 262: Start des Containerprozesses verursacht "process_linux.go: 339: Container-Init verursacht" rootfs_linux.go: 57: Mounten \\ / appdata / nginx / conf / nginx.conf \\ "to rootfs \\" / var / lib / docker / aufs / mnt / dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0 \\ "at \\" / var / lib / docker / aufs / mnt / dceaf809 \\ "verursacht \\" kein Verzeichnis \\ "\" ": Versuchen Sie, ein Verzeichnis in eine Datei einzubinden (oder umgekehrt)? Überprüfen Sie, ob der angegebene Hostpfad vorhanden ist und vom erwarteten Typ ist.
Wenn Sie die nginx.conf
Datei nicht mounten , ist alles in Ordnung. Wie kann ich die Konfigurationsdatei bereitstellen?
ls -al .
? Willst du sehen, wie dein Pwd aussieht?docker rm …
) entfernen und dann neu erstellen.Antworten:
Weil Docker
$PWD/conf/nginx.conf
als Ordner und nicht als Datei erkennt . Überprüfen Sie, ob das$PWD/conf/
Verzeichnisnginx.conf
ein Verzeichnis enthält .Test mit
Öffnen Sie andernfalls ein Docker-Problem .
Es funktioniert gut für mich mit der gleichen Konfiguration.
quelle
-v
nginx.conf
schon vorher auf diesem Pfad existierte, würde Linux es als Datei erkennen, oder?Dies sollte nicht mehr passieren (seit v2.2.0.0), siehe hier
Wenn Sie Docker für Windows verwenden , kann dieser Fehler auftreten, wenn Sie kürzlich Ihr Kennwort geändert haben.
Wie repariert man:
docker rm -v <container_name>
Aktualisierung: Die folgenden Schritte funktionieren möglicherweise, ohne dass zuvor Volumes gelöscht werden müssen.
Die Lösung geht an BaranOrnarli auf GitHub.
quelle
TL; DR : Entfernen Sie die dem Container zugeordneten Volumes.
Suchen Sie den Containernamen mit
docker ps -a
und entfernen Sie diesen Container mit:Problem:
Der Fehler, mit dem Sie konfrontiert sind, kann auftreten, wenn Sie zuvor versucht haben, den
docker run
Befehl auszuführen, während die Datei nicht an der Stelle vorhanden war, an der sie sich im Hostverzeichnis befinden sollte.In diesem Fall hätte der Docker-Dämon an seiner Stelle ein Verzeichnis innerhalb des Containers erstellt, das später nicht der richtigen Datei zugeordnet werden kann, wenn die richtigen Dateien im Host-Verzeichnis abgelegt werden und der Docker-Befehl erneut ausgeführt wird.
Lösung:
Entfernen Sie die Volumes, die dem Container zugeordnet sind. Wenn Sie sich keine Gedanken über andere Containervolumen machen, können Sie auch Folgendes verwenden:
quelle
docker volume
Befehl / die Schnittstelle ist nur für anonyme und benannte Volumes vorgesehen, die nicht Teil der ursprünglichen Frage sind./var/lib/docker/aufs/mnt/dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0\\\"
Mein Abzug zu mounten : Aufgrund eines vorherigen Laufs ist bereits ein Ordner vorhanden. Wenn Sie also versuchen, eine Datei diesem Ordner zuzuordnen, schlägt dies fehl.Antwort für Benutzer der Docker Toolbox
Es gab hier mindestens 3 Antworten, die das Problem berührten, es aber nicht richtig erklärten und keine vollständige Lösung gaben. Dies ist nur ein Problem bei der Ordnermontage .
Beschreibung des Problems:
Die Docker Toolbox umgeht die Hyper-V-Anforderungen von Docker, indem eine virtuelle Maschine erstellt wird (in VirtualBox, die im Lieferumfang enthalten ist). Docker wird in der VM installiert und ausgeführt. Damit Docker ordnungsgemäß funktioniert, muss es vom Host-Computer aus auf das zugreifen können. Was hier nicht der Fall ist.
Nachdem ich Docker Toolbox installiert hatte, wurde die VirtualBox-VM erstellt und nur als
C:\Users
auf dem Computer bereitgestellt\c\Users\
. Mein Projekt befand sichC:\projects
so nirgends auf dem gemounteten Volume. Wenn ich den Pfad an die VM gesendet habe, war er nicht vorhandenC:\projects
nicht bereitgestellt wurde. Daher der obige Fehler.Angenommen, ich hatte mein Projekt mit meiner ngnix-Konfiguration in
C:/projects/project_name/
Es reparieren:
Gehen Sie zu VirtualBox und klicken Sie mit der rechten Maustaste auf Standard (die VM von Docker)> Einstellungen> Freigegebene Ordner
Klicken Sie auf das kleine Symbol mit dem Pluszeichen auf der rechten Seite und fügen Sie eine neue Freigabe hinzu. Ich habe die folgenden Einstellungen verwendet:
C:\projects
zu/projects
(ROOT/projects
) in der VM, was bedeutet , dass Sie jetzt einen beliebigen Pfad in Projekten wie diesem verweisen können:/projects/project_name
- dennproject_name
vonC:\projects\project_name
nun montiert.In meiner Docker-Datei verweise ich jetzt auf die
nginx.conf
wie folgt:Wo sich nginx.conf tatsächlich befindet
C:\projects\project_name\docker_config\nginx\nginx.conf
quelle
Die Erklärung von @Ayushya war der Grund, warum ich auf diese etwas verwirrende Fehlermeldung gestoßen bin, und die notwendige Reinigung kann einfach so durchgeführt werden:
quelle
Ich hatte das gleiche Problem. Ich habe Docker Desktop mit WSL in Windows 10 17.09 verwendet.
Ursache des Problems:
Das Problem ist, dass Docker für Windows erwartet, dass Sie Ihre Volume-Pfade in einem Format bereitstellen, das diesem entspricht:
/c/Users/username/app
ABER WSL verwendet stattdessen das Format:
/mnt/c/Users/username/app
Das ist verwirrend, weil ich beim Überprüfen der Datei in der Konsole sie gesehen habe und für mich alles korrekt war. Die Erwartungen von Docker für Windows bezüglich der Volume-Pfade waren mir nicht bekannt .
Lösung für das Problem:
Ich habe die benutzerdefinierten Einhängepunkte gebunden, um die Unterschiede zwischen Docker für Windows und WSL zu beheben:
sudo mount --bind /mnt/c /c
Wie in dieser erstaunlichen Anleitung vorgeschlagen: Einrichten von Docker für Windows und WSL, damit es einwandfrei funktioniert funktioniert einwandfrei und jetzt funktioniert alles einwandfrei.
Bevor ich anfing, WSL zu verwenden, benutzte ich Git Bash und ich hatte auch dieses Problem.
quelle
Ich verwende Docker ToolBox für Windows. Standardmäßig wird C Drive automatisch bereitgestellt. Um die Dateien bereitzustellen, stellen Sie sicher, dass sich Ihre Dateien und Ordner in C DRIVE befinden . .
Beispiel:
C:\Users\%USERNAME%\Desktop
quelle
Vielleicht findet das jemand nützlich. In meiner Compose-Datei wurde folgendes Volume bereitgestellt
Da ./file nicht vorhanden war, wurde es in ABC gemountet (standardmäßig als Ordner).
In meinem Fall hatte ich einen Container daraus
Als ich später ./file erstellte und ausführte
docker-compose up
, hatte ich den Fehler:Der Container, der von einem
cool_image
erinnerten/dir/file
Verzeichnis aufgerufen wurde, war ein Verzeichnis und stand in Konflikt mit dem kürzlich erstellten und gemounteten./file
.Die Lösung war:
quelle
In Windows 10 erhalte ich nur diesen Fehler, ohne etwas an meinem zu ändern
docker-compose.yml
Datei oder der Docker-Konfiguration im Allgemeinen vorgenommen werden.In meinem Fall habe ich ein VPN mit einer Firewall-Richtlinie verwendet, die Port 445 blockiert.
Nach dem Trennen vom VPN verschwindet das Problem.
Ich empfehle daher, Ihre Firewall zu überprüfen und keinen Proxy oder VPN zu verwenden, wenn Sie Docker Desktop ausführen.
Überprüfen Sie Docker auf Windows - Firewall-Regeln für freigegebene LaufwerkeWeitere Informationen finden .
Ich hoffe das wird jemand anderem helfen.
quelle
Könnten Sie bitte den absoluten / vollständigen Pfad anstelle von verwenden
$PWD/conf/nginx.conf
? Dann wird es funktionieren.EX:docker run --name nginx-container5 --rm -v /home/sree/html/nginx.conf:/etc/nginx/nginx.conf -d -p 90:80 nginx b9ead15988a93bf8593c013b6c27294d38a2a40f4ac75b1c1ee362de4723765b root@sree-VirtualBox:/home/sree/html# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b9ead15988a9 nginx "nginx -g 'daemon of…" 7 seconds ago Up 6 seconds 0.0.0.0:90->80/tcp nginx-container5 e2b195a691a4 nginx "/bin/bash" 16 minutes ago Up 16 minutes 0.0.0.0:80->80/tcp test-nginx
quelle
Ich habe das gleiche Problem mit Docker über WSL1 unter Windows 10 mit dieser Befehlszeile festgestellt:
Ich habe das Problem behoben, indem ich den Pfad für die Datei auf dem Hostsystem in einen absoluten Pfad im UNIX-Stil geändert habe:
oder Verwenden eines absoluten Pfads im Windows-Stil mit
/
anstelle von\
Pfadtrennzeichen:quelle
Durch das Aktualisieren von Virtual Box auf 6.0.10 wurde dieses Problem für Docker Toolbox behoben
https://github.com/docker/toolbox/issues/844
Ich hatte diese Art von Fehler:
Nach dem Update von VitualBox haben alle Befehle einwandfrei funktioniert 🎉
quelle
Hatte den gleichen Kopfkratzer, weil ich die Datei nicht lokal hatte, so dass sie als Ordner erstellt wurde.
quelle
Ich hatte einen ähnlichen Fehler auf Niginx in der Mac-Umgebung. Docker hat die Datei default.conf nicht richtig erkannt. Nach dem Ändern des relativen Pfads in den absoluten Pfad wurde der Fehler behoben.
quelle
Für mich hat das nicht funktioniert:
Aber das funktioniert gut (offensichtlich habe ich meine Konfigurationsdatei auch in ein neues Verzeichnis verschoben:
quelle
Ich werde meinen Fall hier teilen, da dies in Zukunft viel Zeit für jemand anderen sparen kann.
Ich hatte ein perfekt funktionierendes Docker-Compose auf meinen Macos, bis ich anfing, Docker-in-Docker in Gitlab CI zu verwenden. Ich erhielt nur die Berechtigung, als Master in einem Repository zu arbeiten, und das Gitlab CI wird von jemand anderem selbst gehostet und eingerichtet, und es wurden keine weiteren Informationen über die Einrichtung usw. geteilt.
Folgendes hat das Problem verursacht:
Erst als ich bemerkte, dass dies unter Windows ausgeführt werden könnte (Stunden am Kopf kratzen), habe ich versucht, die wodpress.conf in default.conf umzubenennen und nur die Verzeichnispfadnamen festzulegen:
Dies löste das Problem!
quelle
Ich hatte dieses Problem unter Windows 7, weil sich meine Docker-Datei auf einem anderen Laufwerk befand.
Folgendes habe ich getan, um das Problem zu beheben:
An dieser Stelle
docker-compose up
sollte funktionieren.quelle
Ich habe den gleichen Fehler unter Windows 10 nach einem Update von Docker erhalten: 2.3.0.2 (45183).
Ich habe solche absoluten Pfade benutzt
//C/workspace/nginx/nginx.conf
und alles hat wie ein Zauber funktioniert.Das Update hat mein Docker-Compose kaputt gemacht und ich musste die Pfade
/C/workspace/nginx/nginx.conf
mit einem einzigen/
für den Root ändern .quelle
Beachten Sie, dass diese Situation auch auftritt, wenn Sie versuchen, ein Volume vom Host bereitzustellen, das nicht zum Abschnitt Ressourcen> Dateifreigabe in den Docker-Einstellungen hinzugefügt wurde.
Durch Hinzufügen des Stammpfads als Dateifreigaberessource kann Docker nun auf die Ressource zugreifen, um sie in den Container einzubinden. Beachten Sie, dass Sie möglicherweise den Inhalt Ihres Docker-Containers löschen müssen, um zu versuchen, das Volume erneut bereitzustellen.
Wenn sich Ihre Anwendung beispielsweise unter befindet
/mysites/myapp
, möchten Sie sie/mysites
als Speicherort für die Dateifreigaberessource hinzufügen .quelle
Ich hatte das gleiche Problem: Docker-Compose erstellte ein Verzeichnis anstelle einer Datei und stürzte dann auf halbem Weg ab.
Was ich getan habe:
Führen Sie den Container ohne Zuordnung aus.
Kopieren Sie die
.conf
Datei an den Hostspeicherort:docker cp containername:/etc/nginx/nginx.conf ./nginx.conf
Entferne den Behälter (
docker-compose down
).Setzen Sie das Mapping zurück.
Montieren Sie den Behälter wieder.
Docker Compose findet die
.conf
Datei und ordnet sie zu, anstatt zu versuchen , ein Verzeichnis zu erstellen .quelle
Ich habe das Mount-Problem gelöst. Ich verwende eine Win 7-Umgebung und das gleiche Problem ist mir passiert.
Der Container hat ein Standard-Synchronisierungsverzeichnis unter
C:\Users\
, daher habe ich mein Projekt verschoben und das ProjektC:\Users\
neu erstellt. Jetzt funktioniert es.quelle