我有一个版本为17.06.0-ce
的泊坞广告。当我尝试使用docker使用命令安装nginx时:
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
它表明
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.
如果不挂载nginx.conf
文件,一切正常。那么,我该如何挂载配置文件呢?
感谢。
答案 0 :(得分:89)
如果您使用 Docker for Windows ,如果您最近更改了密码,则会发生此错误。
如何解决:
docker rm -v <container_name>
答案 1 :(得分:10)
因为泊坞广告将$PWD/conf/nginx.conf
识别为文件夹而不是文件
检查$PWD/conf/
目录是否包含nginx.conf为目录。
尝试
> cat $PWD/conf/nginx.conf
cat: nginx.conf/: Is a directory
否则,请打开Docker issue 它具有相同的配置,对我来说很好。
答案 2 :(得分:9)
删除与容器关联的卷。使用docker ps -a
查找容器名称,然后使用以下命令删除容器:
docker rm -v <container_name>
<强>问题:强>
如果您之前尝试运行docker run
命令,而该文件不在主机目录中的位置,则可能会出现您所面临的错误。在这种情况下,docker守护程序会在其位置的容器内创建一个目录。当正确的文件放入主机目录并且再次运行docker时,后者无法映射到正确的文件。
<强>解决方案:强>
删除与容器关联的卷。如果您不关心其他容器卷,也可以使用:
docker volume rm $(docker volume ls -q)
答案 3 :(得分:3)
我知道这个问题是很久以前发布的,但是我仍然想回答我如何解决这个问题。
我正在使用Windows的Docker ToolBox。默认情况下,会自动安装 C驱动器,因此,要安装文件,请确保您的文件和文件夹位于 C驱动器内。
示例: C:\ Users \%USERNAME%\ Desktop
答案 4 :(得分:2)
答案 5 :(得分:2)
使用 Docker Toolbox
的人们的答案这里至少有3个答案涉及该问题,但没有正确解释它,没有给出完整的解决方案。这只是一个文件夹安装问题。
问题描述:
Docker Toolbox通过创建虚拟机(在捆绑提供的VirtualBox中)来绕过Docker的Hyper-V要求。 Docker已安装并在VM中运行。为了使Docker正常运行,它需要能够从主机访问。在这里没有。
我安装了Docker Toolbox之后,它创建了VirtualBox VM,并且仅将C:\Users
作为\c\Users\
挂载到了计算机上。我的项目在C:\projects
中,因此挂载的卷上没有任何地方。当我将路径发送到VM时,该路径将不存在,因为尚未安装C:\projects
。因此,上面的错误。
假设我的项目在C:/projects/project_name/
中包含了我的ngnix配置
修复:
C:\projects
映射到VM中的/projects
(ROOT/projects
),这意味着现在您可以引用以下项目中的任何路径:/projects/project_name
-因为{ project_name
中的{1}}已安装。要使用相对路径,请考虑将路径命名为
C:\projects\project_name
而不是c/projects
在我的docker文件中,我现在这样引用projects
:
nginx.conf
nginx.conf实际位于volumes:
- /projects/project_name/docker_config/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
的位置
答案 6 :(得分:2)
我有同样的问题。我在Windows 10 17.09中将Docker Desktop与WSL一起使用。
问题原因: 问题在于,Docker for Windows希望您以与以下格式匹配的方式提供卷路径: / c / Users / username / app 。但是,WSL改为使用 / mnt / c / Users / username / app 格式。这很令人困惑,因为在控制台中检查文件时,我看到了它,对我而言一切都正确。我不了解Docker for Windows对 卷路径 的期望。
问题的解决方案: 我绑定了自定义安装点以修复Docker for Windows和WSL的差异: sudo mount --bind / mnt / c / c },现在一切正常。
在我开始使用WSL之前,我正在使用Git Bash,我也遇到了这个问题。
答案 7 :(得分:1)
在Windows 10上通过以下命令行在WSL1上使用Docker时,我遇到了相同的问题:
echo $PWD
/mnt/d/nginx
docker run --name nginx -d \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
nginx
我通过将主机系统上文件的路径更改为UNIX风格的绝对路径来解决它:
docker run --name nginx -d \
-v /d/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
nginx
或将Windows样式的绝对路径与/
代替\
用作路径分隔符:
docker run --name nginx -d \
-v D:/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
nginx
答案 8 :(得分:1)
在Windows 10中,我只是收到此错误,而没有更改我的docker-compose.yml
文件或Docker配置中的任何内容。
在我的情况下,我使用的VPN带有阻止端口445的防火墙策略。
从VPN断开连接后,问题消失了。
因此,我建议在运行Docker Desktop时检查防火墙,而不使用代理或VPN。
检查Docker for windows - Firewall rules for shared drives以获得更多详细信息。
我希望这会对其他人有所帮助。
答案 9 :(得分:0)
@Ayushya给出的解释是我遇到此令人困惑的错误消息的原因,并且可以像这样轻松完成必要的内务处理:
$ docker container prune
$ docker volume prune
答案 10 :(得分:0)
请问您可以使用绝对路径/完整路径,而不是$ PWD / conf / nginx.conf。它将起作用
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
答案 11 :(得分:0)
就我而言,这是Docker for Windows的问题,它使用由Bitlocker加密的分区。如果重新启动并解锁驱动器后加密文件上有项目文件,Dokcer将无法正确看到项目文件。
您需要做的就是重启Docker
答案 12 :(得分:0)
我遇到了同样的问题,docker-compose正在创建目录而不是文件,然后在中途崩溃。
我做了什么:
运行容器而不进行任何映射。
将.conf
文件复制到主机位置:
docker cp containername:/etc/nginx/nginx.conf ./nginx.conf
删除容器(docker-compose down
)。
放回映射。
重新安装容器。
Docker Compose将找到.conf
文件并映射,而不是尝试创建目录。
答案 13 :(得分:0)
请注意,如果您尝试从主机上装入尚未添加到Docker Preferences的Resources> File Sharing部分中的卷,也会发生这种情况。
现在将根路径添加为文件共享资源将允许Docker访问该资源以将其安装到容器。请注意,您可能需要擦除Docker容器上的内容才能尝试重新安装该卷。
例如,如果您的应用程序位于/mysites/myapp
,则需要将/mysites
添加为文件共享资源位置。
答案 14 :(得分:0)
在Docker更新后,我在Windows10上遇到了相同的错误:2.3.0.2(45183)。
...导致
\\\"not a directory\\\"\"":
未知:您是否正在尝试将目录装载到文件上(反之亦然)?检查指定的主机路径是否存在并且是预期的类型
我正在使用像//C/workspace/nginx/nginx.conf
这样的绝对路径,并且所有内容都像一个符咒。
更新中断了我的docker-compose,并且我不得不将路径更改为/C/workspace/nginx/nginx.conf
,并用一个单独的/
作为根。
答案 15 :(得分:0)
在Windows 7下,我遇到了这个问题,因为我的dockerfile位于不同的驱动器上。
这是我要解决的问题:
此时,docker-compose up
应该可以工作。
答案 16 :(得分:0)
也许有人觉得这很有用。我的撰写文件已装入以下卷
./file:/dir/file
由于./file不存在,因此将其装入ABC(默认为文件夹)。
在我的情况下,我有一个容器来自
docker commit ABC cool_image
后来我创建./file并运行docker-compose up
时,出现错误:
[...]您是否尝试将目录挂载到文件上(反之亦然)?检查指定的主机路径是否存在以及是否为预期的类型。
从cool_image
提起的容器记住/dir/file
是一个目录,它与最近创建并挂载的./file
冲突。
解决方案是:
touch ./file
docker run abc_image --name ABC -v ./file:/dir/file
# ... desired changes to ABC
docker commit ABC cool_image
答案 17 :(得分:0)
我将在这里分享我的情况,因为这可能在将来为其他人节省很多时间。
我在macOS上使用了完美的docker-compose,直到开始在Gitlab CI中使用docker-in-docker。我只被授予在存储库中担任Master的权限,而Gitlab CI是由他人自行托管和设置的,并且没有共享任何其他信息,例如如何设置等。
以下是导致此问题的原因:
volumes:
- ./.docker/nginx/wordpress/wordpress.conf:/etc/nginx/conf.d/default.conf
仅当我发现它可能在Windows下运行(花费数小时的时间)时,我才尝试将wodpress.conf重命名为default.conf并仅设置dir路径名:
volumes:
- ./.docker/nginx/wordpress:/etc/nginx/conf.d
这解决了问题!
答案 18 :(得分:0)
对我来说,这不起作用:
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
答案 19 :(得分:0)
未知:您是否正在尝试将目录挂载到文件上(反之亦然)?检查指定的主机路径是否存在并且是预期的类型
我在Mac环境中的niginx上遇到了类似的错误。 Docker无法正确识别default.conf文件。将相对路径更改为绝对路径后,错误已修复。
Range("N2").FormulaR1C1 = "=IF(ISNA(VLOOKUP(RC[-6],'[" & Wb.Name & "]" & WsPivot.Name & "'!R1C1:R20C18,2,FALSE)),0,VLOOKUP(RC[-6],'[" & Wb.Name & "]" & WsPivot.Name & "'!R1C1:R20C18,2,FALSE))"
答案 20 :(得分:0)
因为我没有本地文件,所以它具有相同的头划痕,因此它将其创建为文件夹。
mimas@Anttis-MBP:~/random/dockerize/tube$ ls
Dockerfile
mimas@Anttis-MBP:~/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.
mimas@Anttis-MBP:~/random/dockerize/tube$ ls
Dockerfile logs.txt/
答案 21 :(得分:0)
将Virtual Box更新到6.0.10修复了Docker Toolbox的此问题
https://github.com/docker/toolbox/issues/844
我遇到这种错误:
mlepisto@DESKTOP-VKJ76GO MINGW64 ~/G/Projects
$ touch resolv.conf
mlepisto@DESKTOP-VKJ76GO 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
mlepisto@DESKTOP-VKJ76GO MINGW64 ~/G/Projects/
$ docker run --rm -it -v $PWD/resolv.conf:/etc/resolv2.conf ubuntu /bin/bash
root@a5020b4d6cc2:/# exit
exit
更新VitualBox之后,所有命令都可以正常工作?
答案 22 :(得分:-1)
我已经解决了挂载问题,我处于win7环境中,同样的问题发生在我身上,显示“您是否正在尝试将目录挂载到文件上”。容器在wins C:\ Users \中具有默认的同步目录,所以我将项目移至C:\ Users \。然后重新创建项目。它可以正常工作。