Вы пытаетесь установить каталог в файл (или наоборот)?
У меня есть докер с версией 17.06.0-ce
. Когда я пытаюсь установить NGINX, используя docker с командой:
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
Это показывает, что
Докер: Ошибка ответа от демона: oci Ошибка времени выполнения: container_linux.go: 262: вызван запуск процесса контейнера "process_linux.go: 339: вызвана инициализация контейнера \" rootfs_linux.go: 57: монтирование \\"/appdata/nginx/conf/nginx.conf \\" в rootfs \\ "/Var/Library/грузчик /AUFS/мнт/dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0 \\" в \\ "/Var/Library/грузчик /AUFS/мнт/dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0/и т.д. /Nginx/nginx.conf \\" вызвал\\"не каталог \\"\"" : Вы пытаетесь смонтировать каталог в файл (или наоборот)? Проверьте, существует ли указанный путь к хосту и соответствует ли он ожидаемому типу.
Если не монтировать файл nginx.conf
, все в порядке. Итак, как я могу смонтировать файл конфигурации?
Ответы
Ответ 1
Потому что Docker распознает $PWD/conf/nginx.conf
как папку, а не как файл.
Проверьте, не содержит ли каталог $PWD/conf/
каталог nginx.conf в качестве каталога.
Попробуй с
> cat $PWD/conf/nginx.conf
cat: nginx.conf/: Is a directory
В противном случае откройте вопрос Docker.
Это работает нормально для меня с той же конфигурации.
Ответ 2
Если вы используете Docker для Windows, эта ошибка может произойти, если вы недавно изменили свой пароль.
Как исправить:
- Сначала убедитесь, что вы удалили поврежденный контейнер
docker rm -v <container_name>
Обновление. Приведенные ниже шаги могут работать без предварительного удаления томов. - Открыть настройки Docker
- Перейдите на вкладку "Общие диски"
- Нажмите на ссылку "Сбросить учетные данные..." в нижней части окна.
- Повторно поделитесь дисками, которые вы хотите использовать с Docker
- Вам будет предложено ввести имя пользователя/пароль
- Нажмите "Применить"
- Перейти на вкладку "Сброс"
- Нажмите "Перезагрузить Docker"
- Воссоздайте свои контейнеры/тома
Кредит предоставляется BaranOrnarli на GitHub для решения.
Ответ 3
Удалите объемы, связанные с контейнером. Найдите имя контейнера с помощью docker ps -a
затем удалите контейнер, используя:
docker rm -v <container_name>
Проблема:
Ошибка, с которой вы столкнулись, может возникнуть, если вы попытались docker run
команду запуска docker run
раньше, когда файл не присутствовал в том месте, где он должен был находиться в каталоге хоста. В этом случае демон docker создал бы свою директорию внутри контейнера. Что позже не удается сопоставить с соответствующим файлом, когда правильные файлы помещаются в каталог хоста, а докер запускается снова.
Решение:
Удалите тома, связанные с контейнером. Если вас не беспокоят другие объемы контейнеров, вы также можете использовать:
docker volume rm $(docker volume ls -q)
Ответ 4
Я использую Docker ToolBox для Windows. По умолчанию диск C монтируется автоматически, поэтому для монтирования файлов убедитесь, что ваши файлы и папки находятся внутри C DRIVE.
Пример: C:\Users\%USERNAME%\Desktop
Ответ 5
У меня такая же проблема. Я использовал Docker Desktop с WSL в Windows 10 17.09.
Причина проблемы: проблема в том, что Docker для Windows ожидает от вас указания путей к томам в формате, который соответствует следующему: /c/Users/username/app. Но вместо этого WSL использует формат /mnt/c/Users/username/app. Это сбивает с толку, потому что при проверке файла в консоли я видел его и для меня все было правильно. Я не знал об ожиданиях Docker для Windows относительно путей к томам.
Решение проблемы: я связал пользовательские точки монтирования, чтобы исправить различия между Docker для Windows и WSL: монтирование sudo --bind/mnt/c/c было предложено в этом замечательном руководстве. Настройка Docker для Windows и WSL для безупречной работы и все работает отлично сейчас.
До того, как я начал использовать WSL, я использовал Git Bash, и у меня тоже была эта проблема.
Ответ 6
не могли бы вы использовать абсолютный путь/полный путь, вместо этого будет работать $ PWD/conf/nginx.conf.it
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
Ответ 7
Обновление Virtual Box до 6.0.10 устранило эту проблему для Docker Toolbox
https://github.com/docker/toolbox/issues/844
Я столкнулся с такой ошибкой:
[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
После обновления VitualBox все команды работали нормально 🎉
Ответ 8
Была та же самая царапина на голове, потому что у меня не было файла локально, поэтому он создал его как папку.
[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/
Ответ 9
неизвестно: вы пытаетесь смонтировать каталог в файл (или наоборот)? Проверьте, существует ли указанный путь к хосту и является ли он ожидаемым типом
У меня была похожая ошибка на Niginx в среде Mac.
Docker не распознал файл default.conf правильно. После изменения относительного пути на абсолютный путь ошибка была исправлена.
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
Ответ 10
Для меня это не сработало:
volumes:
- ./:/var/www/html
- ./nginx.conf:/etc/nginx/conf.d/site.conf
Но это работает нормально (очевидно, что мой конфигурационный файл тоже перемещен в новый каталог:
volumes:
- ./:/var/www/html
- ./nginx/nginx.conf:/etc/nginx/conf.d/site.conf
Ответ 11
Я поделюсь своим примером здесь, так как это может сэкономить много времени для кого-то еще в будущем.
У меня был отлично работающий docker-compose на моих macos, пока я не начал использовать docker-in-docker в Gitlab CI. Мне дали только разрешения работать в качестве Мастера в репозитории, и CI Gitlab самостоятельно размещается и настраивается кем-то другим, и никакая другая информация не была передана, о том, как она настраивается и т.д.
Следующее вызвало проблему:
volumes:
- ./.docker/nginx/wordpress/wordpress.conf:/etc/nginx/conf.d/default.conf
Только когда я заметил, что это может быть запущено под windows (часы чесали голову), я попытался переименовать wodpress.conf в default.conf и просто установить пути к каталогам:
volumes:
- ./.docker/nginx/wordpress:/etc/nginx/conf.d
Это решило проблему!
Ответ 12
До сих пор работа для меня - это создать файл nginx.conf
вручную.
Ответ 13
Я решил проблему с монтированием, я нахожусь в среде win7, и та же самая проблема произошла со мной, покажи: "Вы пытаетесь смонтировать каталог в файл". Контейнер имеет каталог синхронизации по умолчанию в wins C:\Users \, поэтому я перенесу мой проект в C:\Users \. Затем воссоздайте проект .it works.