it-swarm.com.de

Versuchen Sie, ein Verzeichnis in eine Datei einzuhängen (oder umgekehrt)?

Ich habe ein Docker mit der Version 17.06.0-ce. Wenn ich versuche, nginx mit Docker mit dem folgenden 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: Error response from daemon: oci runtime error: container_linux.go:262: starting container process caused "process_linux.go:339: container init caused \"rootfs_linux.go:57: mounting \\\"/appdata/nginx/conf/nginx.conf\\\" to rootfs \\\"/var/lib/docker/aufs/mnt/dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0\\\" at \\\"/var/lib/docker/aufs/mnt/dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0/etc/nginx/nginx.conf\\\" caused \\\"not a directory\\\"\""
: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified Host path exists and is the expected type.

Wenn Sie die nginx.conf-Datei nicht einhängen, ist alles in Ordnung. Wie kann ich also die Konfigurationsdatei einhängen? 

Vielen Dank.

22
Steven Luo

Weil Docker $PWD/conf/nginx.conf als Ordner und nicht als Datei erkennt.
Prüfen Sie, ob das $PWD/conf/-Verzeichnis nginx.conf nicht als Verzeichnis enthält.

Versuche es mit 

> cat $PWD/conf/nginx.conf 
cat: nginx.conf/: Is a directory

Andernfalls öffnen Sie eine Docker-Ausgabe .
Es funktioniert gut mit der gleichen Konfiguration.

9
user4912329

Wenn Sie Docker für Windows verwenden, kann dieser Fehler auftreten, wenn Sie kürzlich Ihr Kennwort geändert haben.

Wie repariert man:

  1. Löschen Sie zunächst das Volumen des defekten Containers
    docker rm -v <container_name>
  2. Öffnen Sie die Docker-Einstellungen
  3. Gehen Sie zur Registerkarte "Shared Drives"
  4. Klicken Sie unten im Fenster auf den Link "Anmeldeinformationen zurücksetzen"
  5. Teilen Sie die Laufwerke, die Sie mit Docker verwenden möchten, erneut
    • Sie sollten aufgefordert werden, Ihren Benutzernamen und Ihr Kennwort einzugeben
  6. Klicken Sie auf "Übernehmen".
  7. Gehen Sie zur Registerkarte "Zurücksetzen"
  8. Klicken Sie auf "Docker neu starten".
  9. Erstellen Sie Ihre Container/Volumes neu

Credit geht an BaranOrnarli auf GitHub für die Lösung.

66
Jesse Webb

Entfernen Sie die mit dem Container verknüpften Volumes. Suchen Sie den Containernamen mit docker ps -a und entfernen Sie den Container mit:

docker rm -v <container_name>

Problem:

Der aufgetretene Fehler kann auftreten, wenn Sie zuvor versucht hatten, den Befehl docker run auszuführen, wenn sich die Datei nicht an dem Ort befand, an dem sie sich im Host-Verzeichnis befinden sollte. In diesem Fall hätte der Docker-Daemon an seiner Stelle ein Verzeichnis innerhalb des Containers erstellt. Die spätere Zuordnung zur richtigen Datei schlägt fehl, wenn korrekte Dateien im Host-Verzeichnis abgelegt werden und das Docker erneut ausgeführt wird.

Lösung:

Entfernen Sie die Volumes, die dem Container zugeordnet sind. Wenn Sie sich nicht um andere Container-Volumes kümmern, können Sie auch Folgendes verwenden:

docker volume rm $(docker volume ls -q)
9
Ayushya

Ich hatte das gleiche problem Ich habe Docker Desktop mit WSL in Windows 10 17.09 verwendet.

Ursache des Problems: Das Problem besteht darin, dass Docker für Windows von Ihnen erwartet, dass Sie die Datenträgerpfade in einem Format bereitstellen, das diesem Format entspricht: /c/Users/Benutzername/App. Die WSL verwendet jedoch stattdessen das Format /mnt/c/Users/Benutzername/App. Dies ist verwirrend, da ich beim Überprüfen der Datei in der Konsole sie gesehen habe und für mich alles korrekt war. Ich kannte die Erwartungen von Docker für Windows bezüglich der Datenträgerpfade nicht.

Lösung des Problems: Ich habe die benutzerdefinierten Einhängepunkte gebunden, um Docker für Windows- und WSL-Unterschiede zu beheben: Sudo mount --bind/mnt/c/c wie in dieser erstaunlichen Anleitung vorgeschlagen Einrichten von Docker für Windows und WSL, um fehlerfrei zu funktionieren und jetzt funktioniert alles perfekt.

Bevor ich mit WSL anfing, verwendete ich Git Bash und hatte auch dieses Problem.

2
webcu

unbekannt: Versuchen Sie, ein Verzeichnis in eine Datei einzuhängen (oder umgekehrt)? Überprüfen Sie, ob der angegebene Hostpfad vorhanden und der erwartete Typ ist

Ich hatte einen ähnlichen Fehler auf Niginx in der Mac-Umgebung. Docker hat die Datei default.conf nicht richtig erkannt. Nachdem der relative Pfad in den absoluten Pfad geändert wurde, wurde der Fehler behoben.

      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
0
Yano Yujin

könnten Sie bitte den absoluten Pfad/vollständigen Pfad verwenden? stattdessen wird $ PWD/conf/nginx.conf .it funktionieren 

EX:docker run --name nginx-container5 --rm  -v /home/sree/html/nginx.conf:/etc/nginx/nginx.conf -d -p 90:80 nginx
b9ead15988a93bf8593c013b6c27294d38a2a40f4ac75b1c1ee362de4723765b

[email protected]:/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

Ich weiß, dass diese Frage schon vor langer Zeit veröffentlicht wurde, aber ich würde trotzdem gerne antworten, wie ich dieses Problem gelöst habe.

Ich benutze Docker ToolBox für Windows. Standardmäßig wird C Drive automatisch angehängt. Um die Dateien bereitzustellen, stellen Sie sicher, dass sich Ihre Dateien und Ordner innerhalb von C DRIVE befinden.

Beispiel: C:\Benutzer \% USERNAME%\Desktop  

0
Abhishek D K

Hatte den gleichen Kopfkratzer, weil ich die Datei nicht lokal hatte und sie als Ordner erstellte.

[email protected]:~/random/dockerize/tube$ ls
Dockerfile
[email protected]:~/random/dockerize/tube$ docker run --rm -v $(pwd)/logs.txt:/usr/app/logs.txt devopsdockeruh/first_volume_exercise
docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:430: container init caused \"rootfs_linux.go:58: mounting \\\"/Users/mimas/random/dockerize/tube/logs.txt\\\" to rootfs \\\"/var/lib/docker/overlay2/75891ea3688c58afb8f0fddcc977c78d0ac72334e4c88c80d7cdaa50624e688e/merged\\\" at \\\"/var/lib/docker/overlay2/75891ea3688c58afb8f0fddcc977c78d0ac72334e4c88c80d7cdaa50624e688e/merged/usr/app/logs.txt\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified Host path exists and is the expected type.
[email protected]:~/random/dockerize/tube$ ls
Dockerfile  logs.txt/
0
t0rjantai

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 habe diese Art von Fehler festgestellt:


[email protected] MINGW64 ~/G/Projects
$ touch resolv.conf

[email protected] MINGW64 ~/G/Projects
$ docker run --rm -it -v $PWD/resolv.conf:/etc/resolv.conf ubuntu /bin/bash
C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:430: container init caused \"rootfs_linux.go:58: mounting \\\"/c/Users/mlepisto/G/Projects/resolv.conf\\\" to rootfs \\\"/mnt/sda1/var/lib/docker/overlay2/61eabcfe9ed7e4a87f40bcf93c2a7d320a5f96bf241b2cf694a064b46c11db3f/merged\\\" at \\\"/mnt/sda1/var/lib/docker/overlay2/61eabcfe9ed7e4a87f40bcf93c2a7d320a5f96bf241b2cf694a064b46c11db3f/merged/etc/resolv.conf\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified Host path exists and is the expected type.

# mounting to some other file name inside the container did work just fine
[email protected] MINGW64 ~/G/Projects/
$ docker run --rm -it -v $PWD/resolv.conf:/etc/resolv2.conf ubuntu /bin/bash
[email protected]:/# exit
exit

Nach dem Update von VitualBox funktionierten alle Befehle einwandfrei ????

0
Mikael Lepistö