社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

Docker for windows挂载文件到Nginx目录踩坑小记

可乐爱宅着 • 4 年前 • 375 次点击  
阅读 8

Docker for windows挂载文件到Nginx目录踩坑小记

前言:因为最近在学Docker,通过菜鸟教程的文档,在学到Docker安装Nginx时,挂载目录运行容器时碰到了错误,一直跑不起来,浪费了很多时间,这里记录中途的解决方法

相关教程:

菜鸟教程
这是菜鸟教程的运行代码:

$ docker run -d -p 8082:80 --name runoob-nginx-test-web -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx/logs:/var/log/nginx nginx

踩坑

按照菜鸟教程的命令运行代码,因为教程上的是Linux的目录命令,然后我自己脑抽的把命令脑补成Windows的目录:

docker run -d -p 8082:80 --name runoob-nginx-test-web -v E:/nginx/www:/usr/share/nginx/html -v E:/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v E:/nginx/logs:/var/log/nginx nginx

第一跤:

然后就报错:

docker: Error response from daemon: open \.\pipe\docker_d4w_systray: The syThe system cannot find the file specified

错误分析

经过 有道翻译,系统找不到文件,觉得有可能是路径问题,于是网上搜索Docker在Windows上挂载路径的问题,发现确实有不少坑。

爬起来

网上搜了解决办法,发现要用下面这种方法来书写:

docker run -d -p 8082:80 --name runoob-nginx-test-web -v //E/nginx/www:/usr/share/nginx/html -v //E/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v //E/nginx/logs:/var/log/nginx nginx

第二跤

这一次,倒是没有上面的那个错误了,可是却又出现了新的问题,容器倒是执行了,可是却没跑起来,并且有错误提示:

OCI runtime create failed: container_linux.go:344: starting container process caused "process_linux.go:424: container init caused \"rootfs_linux.go:58: mounting \\\"/E/PHPSpace/docker/nginx/conf/nginx.conf\\\" to rootfs \\\"/var/lib/docker/overlay2/69414be2b2572a590e7ee33cc8765f431e8a354100090e802d78888a85834862/merged\\\" at \\\"/var/lib/docker/overlay2/69414be2b2572a590e7ee33cc8765f431e8a354100090e802d78888a85834862/merged/etc/nginx/nginx.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

错误分析

  1. 简而言之,大意应该是我不应该把一个目录挂载到文件上,或者是文件挂载到目录上,然后我又去网上搜答案:我的nginx.conf可能是个文件夹,要删除重新建立一个文件类型的nginx.conf;
  2. 可是我这里的nginx.conf确实是一个文件,而且还是从nginx容器copy来的,然后又接着找解决办法,找了很久,有说在C盘新建文件的,试了,也不行,最后,发现了Docker for Windows有个桌面应用Docker Desktop启动后可以设置文件挂载的路径问题。

解决错误

然后抱着侥幸心理,我打开了灰色图标Docker,点击Settings,进入设置页面的Shared Drivers里面,勾选了E盘,这里保存需要登录Windows系统的用户名,然后发现尼玛我居然没有设置密码,然后又跑去设置密码,过程:

  • Windows + R, 输入control.exe 进入控制面板,选用户账户;
  • 再次点击用户账户,进去后选择管理其他账户;
  • 然后在里面设置密码就行了。

一切OK后,我又运行了一次命令:
docker run -d -p 8082:80 --name runoob-nginx-test-web -v //E/nginx/www:/usr/share/nginx/html -v //E/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v //E/nginx/logs:/var/log/nginx nginx

结果还是一样的错误,文件不能挂载到目录或是目录不能挂载到文件。

柳暗花明又一村

心中绝望之际,突然看见Shared Drivers下面有句代码提示,可以用Windows的C:/xxx这种命令,然后我就改成这种命令试了一下,居然跑起来了:

docker run -d -p 8082:80 --name runoob-nginx-test-web -v E:/PHPSpace/docker/nginx/www:/usr/share/nginx/html -v E:/PHPSpace/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v E:/PHPSpace/docker/nginx/logs:/var/log/nginx nginx

这就是这一次的踩坑教训,做个笔记,希望不要忘记吧

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/34810
 
375 次点击