Mam dockera z wersją 17.06.0-ce
. Kiedy próbuję zainstalować NGINX za pomocą dockera z poleceniem:
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
To pokazuje że
docker: odpowiedź na błąd z daemon: oci runtime error: container_linux.go: 262: uruchomienie procesu kontenera spowodowało „process_linux.go: 339: inicjalizacja kontenera spowodowała \” rootfs_linux.go: 57: montaż \\ ”/ appdata / nginx / conf / nginx.conf \\ "do głównego systemu plików \\ "/ var / lib / dokowanym / aufs / mnt / dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0 \\" o \\" / var / lib / dokowanym / aufs / mnt / dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0 / itp / nginx / nginx.conf \\ "spowodował \\" nie jest katalogiem \\ "\" ": Czy próbujesz zamontować katalog w pliku (lub odwrotnie)? Sprawdź, czy określona ścieżka hosta istnieje i jest oczekiwanym typem.
Jeśli nie zamontujesz nginx.conf
pliku, wszystko jest w porządku. Jak więc mogę zamontować plik konfiguracyjny?
ls -al .
? Chcę zobaczyć, jak wygląda twoje pwd.docker rm …
), a następnie go odtworzyć.Odpowiedzi:
Ponieważ doker rozpozna
$PWD/conf/nginx.conf
jako folderu , a nie pliku. Sprawdź, czy$PWD/conf/
katalog zawieranginx.conf
jako katalog .Testuj z
W przeciwnym razie otwórz problem z platformą Docker .
U mnie działa dobrze przy tej samej konfiguracji.
źródło
-v
nginx.conf
istniał już wcześniej w tej ścieżce, Linux rozpoznałby go jako plik, prawda?To nie powinno już mieć miejsca (od wersji 2.2.0.0), zobacz tutaj
Jeśli używasz platformy Docker dla systemu Windows , ten błąd może wystąpić, jeśli niedawno zmieniłeś hasło.
Jak naprawić:
docker rm -v <container_name>
Aktualizacja: Poniższe kroki mogą działać bez konieczności wcześniejszego usuwania woluminów.
Rozwiązanie zasługuje na uznanie dla BaranOrnarli na GitHub.
źródło
TL; DR : Usuń woluminy powiązane z kontenerem.
Znajdź nazwę kontenera za pomocą,
docker ps -a
a następnie usuń ten kontener za pomocą:Problem:
Błąd, z którym się spotykasz, może wystąpić, jeśli wcześniej próbowałeś uruchomić
docker run
polecenie, gdy plik nie był obecny w lokalizacji, w której powinien znajdować się w katalogu hosta.W tym przypadku demon Dockera utworzyłby w jego miejscu katalog wewnątrz kontenera, który później nie może mapować do właściwego pliku, gdy poprawne pliki zostaną umieszczone w katalogu hosta i polecenie docker zostanie ponownie uruchomione.
Rozwiązanie:
Usuń woluminy, które są skojarzone z kontenerem. Jeśli nie martwisz się o inne objętości kontenerów, możesz również użyć:
źródło
docker volume
Komenda / interfejs jest tylko dla anonimowych i nazwanych tomów, które nie należą do pierwotnego pytania./var/lib/docker/aufs/mnt/dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0\\\"
Moim dedukcji: ma już folder z powodu poprzedniego uruchomienia, więc jeśli spróbujesz zmapować plik do tego folderu, zakończy się niepowodzeniem.Odpowiedź dla osób korzystających z Docker Toolbox
Były tu co najmniej 3 odpowiedzi dotykające problemu, ale nie wyjaśniające go poprawnie i nie dające pełnego rozwiązania. To tylko problem z montowaniem folderu .
Opis problemu:
Docker Toolbox omija wymaganie Hyper-V platformy Docker, tworząc maszynę wirtualną (w VirtualBox, który jest dostarczany w pakiecie). Docker jest instalowany i uruchamiany w maszynie wirtualnej. Aby Docker działał poprawnie, musi mieć dostęp do hosta. A tutaj nie.
Po zainstalowaniu Docker Toolbox utworzył
C:\Users
maszynę wirtualną VirtualBox i zamontował ją tylko na maszynie, jako\c\Users\
. Mój projekt byłC:\projects
tak nigdzie na zamontowanym woluminie. Kiedy wysyłałem ścieżkę do maszyny wirtualnej, nie istniałaby, ponieważC:\projects
nie jest zamontowana. Stąd powyższy błąd.Powiedzmy, że mam projekt zawierający konfigurację ngnix w formacie
C:/projects/project_name/
Naprawić to:
Przejdź do VirtualBox, kliknij prawym przyciskiem myszy Default (VM z Dockera)> Ustawienia> Foldery współdzielone
Klikając małą ikonę z plusem po prawej stronie, Dodaj nowy udział. Użyłem następujących ustawień:
C:\projects
na/projects
(ROOT/projects
) w maszynie wirtualnej, co oznacza, że teraz możesz odwoływać się do dowolnej ścieżki w projektach takich jak ten:/projects/project_name
- ponieważproject_name
fromC:\projects\project_name
jest teraz zamontowany.W moim pliku Dockera odwołuję się teraz do
nginx.conf
tego:Gdzie faktycznie znajduje się nginx.conf
C:\projects\project_name\docker_config\nginx\nginx.conf
źródło
Wyjaśnienie podane przez @Ayushya było powodem, dla którego trafiłem na ten nieco mylący komunikat o błędzie, a niezbędne sprzątanie można łatwo wykonać w ten sposób:
źródło
Miałem ten sam problem. Używałem Docker Desktop z WSL w Windows 10 17.09.
Przyczyna problemu:
Problem polega na tym, że Docker dla Windows oczekuje podania ścieżek woluminów w formacie, który pasuje do tego:
/c/Users/username/app
ALE, WSL zamiast tego używa formatu:
/mnt/c/Users/username/app
To jest mylące, ponieważ sprawdzając plik w konsoli widziałem go i u mnie wszystko było w porządku. Nie byłem świadomy oczekiwań platformy Docker for Windows dotyczących ścieżek woluminów .
Rozwiązaniem problemu:
Powiązałem niestandardowe punkty montowania, aby naprawić różnice między Docker dla Windows i WSL:
sudo mount --bind /mnt/c /c
Jak zasugerowano w tym niesamowitym przewodniku: Konfiguracja Dockera dla Windows i WSL, aby działały bezbłędnie i wszystko działa teraz idealnie.
Zanim zacząłem używać WSL, korzystałem z Git Bash i miałem również ten problem.
źródło
Używam Docker ToolBox dla Windows. Domyślnie dysk C jest montowany automatycznie, więc aby zamontować pliki, upewnij się, że pliki i foldery znajdują się wewnątrz dysku C DRIVE .
Przykład:
C:\Users\%USERNAME%\Desktop
źródło
Może ktoś uzna to za przydatne. Mój plik redagowania miał zamontowany następujący wolumin
Ponieważ ./file nie istniał, został zamontowany w ABC (domyślnie jako folder).
W moim przypadku miałem pojemnik wynikający z
Kiedy później utworzyłem ./file i uruchomiłem
docker-compose up
, wystąpił błąd:Kontener wywołany z
cool_image
zapamiętanego, że/dir/file
był katalogiem i był w konflikcie z ostatnio utworzonym i zamontowanym./file
.Rozwiązaniem było:
źródło
W systemie Windows 10 po prostu otrzymuję ten błąd bez zmiany czegokolwiek w moim
docker-compose.yml
pliku lub ogólnie w konfiguracji Dockera.W moim przypadku używałem VPN z polityką zapory, która blokuje port 445.
Po odłączeniu się od VPN problem znika.
Dlatego radzę sprawdzić zaporę i nie używać serwera proxy ani VPN podczas uruchamiania Docker Desktop.
Sprawdź Docker dla systemu Windows - reguły zapory dla dysków współdzielonych, aby uzyskać więcej informacji.
Mam nadzieję, że to pomoże komuś innemu.
źródło
Czy mógłbyś zamiast tego użyć ścieżki bezwzględnej / pełnej
$PWD/conf/nginx.conf
? Wtedy zadziała.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
źródło
Doświadczyłem tego samego problemu, używając Dockera nad WSL1 w systemie Windows 10 z tym wierszem poleceń:
Rozwiązałem ten problem, zmieniając ścieżkę do pliku w systemie hosta na ścieżkę bezwzględną w stylu UNIX:
lub używając ścieżki bezwzględnej w stylu Windows z
/
zamiast\
jako separatory ścieżek:źródło
Aktualizacja programu Virtual Box do wersji 6.0.10 rozwiązała ten problem w programie Docker Toolbox
https://github.com/docker/toolbox/issues/844
Wystąpił ten rodzaj błędu:
Po aktualizacji VitualBox wszystkie polecenia działały dobrze 🎉
źródło
Miałem tę samą rysę głowy, ponieważ nie miałem pliku lokalnie, więc utworzył go jako folder.
źródło
Miałem podobny błąd na niginx w środowisku Mac. Docker nie rozpoznał poprawnie pliku default.conf. Po zmianie ścieżki względnej na ścieżkę bezwzględną błąd został naprawiony.
źródło
U mnie to nie zadziałało:
Ale to działa dobrze (oczywiście przeniosłem również mój plik konfiguracyjny do nowego katalogu:
źródło
Podzielę się tutaj moją sprawą, ponieważ może to zaoszczędzić dużo czasu komuś innemu w przyszłości.
Miałem doskonale działającego docker-compose na moich macos, dopóki nie zacząłem używać docker-in-docker w Gitlab CI. Otrzymałem tylko uprawnienia do pracy jako Master w repozytorium, a Gitlab CI jest samodzielnie hostowany i konfigurowany przez kogoś innego i żadne inne informacje nie zostały udostępnione, o tym, jak to jest skonfigurowane itp.
Problem spowodował:
Dopiero gdy zauważyłem, że może to działać pod oknami (godziny drapania po głowie), próbowałem zmienić nazwę wodpress.conf na default.conf i po prostu ustawić ścieżki katalogowe:
To rozwiązało problem!
źródło
Miałem ten problem pod Windows 7, ponieważ mój plik dockerfile znajdował się na innym dysku.
Oto, co zrobiłem, aby rozwiązać problem:
W tym momencie
docker-compose up
powinno działać.źródło
Otrzymałem ten sam błąd na Windows10 po aktualizacji Dockera: 2.3.0.2 (45183).
Używałem takich absolutnych ścieżek
//C/workspace/nginx/nginx.conf
i wszystko działało jak urok.Aktualizacja zepsuła mój docker-compose i musiałem zmienić ścieżki na
/C/workspace/nginx/nginx.conf
jedną/
dla katalogu głównego.źródło
Zauważ, że taka sytuacja wystąpi również, jeśli spróbujesz zamontować wolumin z hosta, który nie został dodany do sekcji Zasoby> Udostępnianie plików w Preferencjach Dockera.
Dodanie ścieżki głównej jako zasobu udostępniania plików umożliwi teraz platformie Docker dostęp do zasobu w celu zamontowania go w kontenerze. Pamiętaj, że może być konieczne wymazanie zawartości kontenera Docker, aby spróbować ponownie zamontować wolumin.
Na przykład, jeśli Twoja aplikacja znajduje się pod adresem
/mysites/myapp
, będziesz chciał dodać/mysites
jako lokalizację zasobów udostępniania plików.źródło
Miałem ten sam problem, docker-compose tworzył katalog zamiast pliku, a następnie zawieszał się w połowie.
Co ja zrobiłem:
Uruchom kontener bez żadnego mapowania.
Skopiuj
.conf
plik do lokalizacji hosta:docker cp containername:/etc/nginx/nginx.conf ./nginx.conf
Wyjmij pojemnik (
docker-compose down
).Odłóż mapowanie z powrotem.
Ponownie zamontuj pojemnik.
Docker Compose znajdzie
.conf
plik i zamapuje go, zamiast próbować utworzyć katalog .źródło
Rozwiązałem problem z montowaniem. Używam środowiska Win 7 i ten sam problem mnie spotkał.
Kontener ma domyślny katalog synchronizacji w
C:\Users\
, więc przeniosłem projekt doC:\Users\
, a następnie ponownie utworzyłem projekt. Teraz działa.źródło