把 windows 10 目录挂载到 vmware 下的 docker 并进行 php 本地开发

把 windows 10 目录挂载到 vmware 下的 docker 并进行 php 本地开发

梦浪的小虾米
2021-10-08 / 5 评论 / 4,600 阅读 / 正在检测是否收录...

前言

作者使用 win 进行 PHP 代码化开发,真香。但是容易出现各种场景下出现一些因为系统不一样而导致的掉头发的问题。所以今天就来解决环境不一致的问题

系统说明

本地 : win10 + vscode + vmware 16 pro (此处无影响,仅供参考)

linux : ubuntu 18.04

docker 20.10.8(此处无影响,仅供参考)

docker 容器里面的 php 版本为 7.4 (此处无影响,仅供参考)

docker 容器内 nginx 为 1.21 (此处无影响,仅供参考)

 最终目标环境

作者需要在 win 本地同步修改 php 文件,文件实时同步到 docker 目录下,并且作者可以实时刷新 web 页面看到修改后的页面效果。

 整体实现逻辑

使用 vmware 的目录共享功能将 win本地的目录同步到 vm 下的 linux 内,然后 docker 启动并挂载相对应的目录。

具体操作流程

  1. 将 vmware 的共享目录设置为本地对应的代码目录。(如下图:设置>选项>共享文件夹>总是启动>添加>确认)

    image-20211008155208293

此时,windos 方面的目录配置已经完成。

  1. 安装 vmtoos。首先可以确认一下自己的 linux 环境是否安装了 vmtools 。命令为:which vmhgfs-fuse 。如果有这个命令,则可以直接进行第 3 步。如果没有这个命令,则需要通过 vmware 菜单栏进行安装。
    image-20211008160153072

    如果您还是无法正常安装的话,建议本文附录的链接进行安装。

  2. 将共享目录挂载到 linux 。请将 下文中的 您的目录 替换为 您的 linux 环境的对应目录, 您的用户id和用户组 id 建议为 docker 的 id, 如果不知道那就使用 root 。umask 对应的权限为 00 表示为 0777

    vmhgfs-fuse .host:/   /您的目录 -o allow_other -o uid=您的用户id -o gid=您的用户组id -o nonempty -o umask=00

image-20211008161014705

  1. 配置 nginx 里面对应网站的配置(主要是修改目录指向,指向对应目录),如下图:给的截图仅供参考,注:我把 app 目录映射到 docker 里面了,所以我直接 app/mount/ ,您需要改成您的 docker 映射的载入的目录。
  2. 启动 docker 容器,载入对应的映射配置。
  3. 打开浏览器,即可正常访问 。

附录

其它问题

下列的问题第一次遇到了,但是我的解决方案是确认权限问题,而网上给的是如下的解决方案。并未测试,自行判断
最后加载网站的时候可能会出现 file not found 之类的错误

打开文件: usr/local/php/etc/php.ini,修改以下配置
把cgi.fix_pathinfo=0 改为 cgi.fix_pathinfo=1
把 ;cgi.force_redirect=1 改为 cgi.force_redirect=0
修改php-fpm.conf里面的user和group都为root,
然后执行命令php-fpm -R 就ok

最后 & 鸣谢

感谢所有写文章的大佬给了我解决方案

0

评论 (5)

取消
  1. 头像
    梦浪的小虾米 作者
    Windows 10 · Google Chrome

    yum remove open-vm-tools 把自动装上的open-vmtools给卸掉,

    回复
  2. 头像
    Windows 10 · Google Chrome

    vmhgfs-fuse .host:/ /root/dnmp -o allow_other -o uid=1000 -o gid=1000 -o nonempty -o umask=00

    #一键生成新的nginx 配置

    ./lnmp-docker nginx-config http /root/dnmp/dlnmp/app/newtest newtest.cc

    回复
  3. 头像
    梦浪的小虾米 作者
    Windows 10 · Google Chrome

    问题描述:
    遇到一个新的bug,如果重启vm后,出现 win 未挂载的情况,然后通过 web 应用直接访问挂载的应用的话,就会出现提示 file not found.

    此时如果直接挂载目录的话,再次访问,毫无效果。

    解决方案:
    需要重启 nginx 和 PHP 容器

    回复
  4. 头像
    梦浪的小虾米 作者
    Windows 10 · Google Chrome

    如果不能用,注意看看容器里面的权限

    回复
  5. 头像
    梦浪的小虾米 作者
    Windows 10 · Google Chrome

    vmhgfs-fuse .host:/ /home/che/docker/lnmp/app/mount -o allow_other -o uid=1000 -o gid=1000 -o nonempty -o umask=00

    回复