前言:因为最近在学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

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

转载于:https://juejin.im/post/5d0746f46fb9a07ebd48d656

Docker for windows挂载文件到Nginx目录踩坑小记相关推荐

  1. docker 三种挂载文件路径方式

    为何要为容器进行文件挂载 为了持久化docker容器产生的数据(数据文件/配置文件/日志文件), 通常会挂载(映射)产生数据的容器内路径到主机路径上. 用处: 不用进入容器内就能访问配置容器内数据 删 ...

  2. Docker容器实现原理及容器隔离性踩坑介绍

    2019独角兽企业重金招聘Python工程师标准>>> 正如Docker官方的口号:"Build once,Run anywhere,Configure once,Run ...

  3. 阿里云配置二级域名与nginx代理踩坑

    之前一直想配置一个二级域名.过程中踩了一些坑.现记录下来也给自己一个总结. 1 配置二级域名 配置二级域名,也就是我们在主域名下分发一个域名.比如 www.baidu.com ,我们想配置一个www. ...

  4. WSL下Docker使用踩坑小记

    众所周知,Win10中开始提供Linux子系统,即Windows Subsystem for Linux,简称WSL,它可以让我们在Windows系统使用Linux系统,自从有了这个新功能以后,博主果 ...

  5. 使用OkHttp 下载文件无进度回调 踩坑

    一.踩坑速记 1. 未添加header指定服务器采用何种压缩方式导致下载进度异常 描述:使用OkHttp3执行文件下载(服务端有nginx反向代理服务器进行压缩),获取回调中文件总大小为0或负值,导致 ...

  6. virtualvenv+django+uWSGI+nginx 部署 踩坑记录

    原创博文 转载请注明出处! uwsgi: unrecognized option '--http:8089' uwsgi: unrecognized option '--http' uwsgi trk ...

  7. 菜鸟在 windows 下 python 中安装 jupyter 踩坑要点 、被神化的 VsCode

    我平时用不到 python ,更没用过 jupyter ,因此我的 python知识仅限于知道有 python 这么个编程语言,会写个 print("Hello World!!!" ...

  8. 装完docker电脑黑屏无法启动_Docker入门踩坑实录

    安装环境 问题:准备安装docker前,要先安装win10的Hyper-v虚拟机(win10专业版才有的哈).在安装Hyper-v时,大叔遇到开启win10开启Hyper-v后,在系统重启过程中,直接 ...

  9. Lenovo R590服务器Windows换装ESXi--2022.01.08(踩坑日记)

    Lenovo R590服务器配置硬盘为一块480GB SSD,一块2TB SAS硬盘,原安装了Windows server 2019在SSD上面.想通过在该物理服务器上安装ESXi6.7,实现运现多台 ...

最新文章

  1. 软件测试职业培训中心,软件测试工程师就业班
  2. Android图片缓存框架Glide
  3. window.showModalDialog弹出模态窗口
  4. eclipse取消空格补全
  5. Symfony2模版引擎使用说明手册
  6. 测试开发python面试_python测试开发面试之深浅拷贝
  7. Maven3.0.5代理nexus
  8. jQuery选择元素
  9. html鼠标悬停效果_【开发小技巧】023—如何使用HTML和CSS实现3D文字效果
  10. 给 console 添加颜色
  11. 带你快速实现【C语言】之三子棋(简易版)
  12. Linux下通过ssh上传、下载文件或者文件夹
  13. example包下载
  14. ​【Flutter小记7】​Mac M1 使用 pod install编译常见两种错误解决方案(CocoaPod Error | LoadError)
  15. Fibonacci数列Linux程序,使用fork()调用计算Fibonacci数列
  16. PCL5打印机命令语言功能参考
  17. 纳尼?华为首席架构师只用434页笔记,就将网络协议给拿下了
  18. 每日一题·648.单词替换·前缀树
  19. uniapp登录页设计
  20. 动态规划求解最大子段和

热门文章

  1. ECCV 2020 | 首届GigaVision挑战赛揭榜,双赛道冠军技术干货分享
  2. 港中文周博磊:十年之间的CVPR与我们(附CVPR2020部分论文链接/开源代码/解读)...
  3. SAP MM VL32N和MIGO对内向交货单做收货,都会更新其‘总体货物移动状态‘
  4. SAP CV02N 审批一个文档
  5. Adam又要“退休”了?耶鲁大学团队提出AdaBelief
  6. 无需「域外」文本,微软:NLP就应该针对性预训练
  7. SAP 操作,弹出报错 - 已根据规则拒绝服务器触发的操作,是否要查看上个通讯步骤中触发的操作列表 -
  8. 微课丨华为的18条军规
  9. 最常拿来面试的算法与数据结构,不是递归,不是动态规划,看下这
  10. 机器学习面试题集-图解准确率,精确率,召回率