Вы пытаетесь установить каталог в файл (или наоборот)?

У меня есть докер с версией 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, эта ошибка может произойти, если вы недавно изменили свой пароль.

Как исправить:

  1. Сначала убедитесь, что вы удалили поврежденный контейнер
    docker rm -v <container_name>
    Обновление. Приведенные ниже шаги могут работать без предварительного удаления томов.
  2. Открыть настройки Docker
  3. Перейдите на вкладку "Общие диски"
  4. Нажмите на ссылку "Сбросить учетные данные..." в нижней части окна.
  5. Повторно поделитесь дисками, которые вы хотите использовать с Docker
    • Вам будет предложено ввести имя пользователя/пароль
  6. Нажмите "Применить"
  7. Перейти на вкладку "Сброс"
  8. Нажмите "Перезагрузить Docker"
  9. Воссоздайте свои контейнеры/тома

Кредит предоставляется 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.