当前位置:首页 > 操作系统 > Windows

如何解决windows docker共享目录不支持符号链接(do not support symlinks)?

windows使用docker toolbox,搭建前端开发环境时,在共享目录使用npm安装前端依赖时,发现报错,无法使用符号连接。

这里有一个帖子专门讨论这个问题,感兴趣可以看一下:

https://askubuntu.com/questio...

我试过了上面所有的法子,发现只有这条有用:

$ npm i --no-bin-links

但是这种解决方式会带来另外一个问题:npm run dev 这些命令将无法使用,因为这个共享目录不支持符号连接,而‘npm run dev’是需要软连接的。

解决方法是

使用vagrant管理virtualBox,然后开一个centos虚拟机,centos里使用docker就可以了。这样共享目录由vagrant配置,默认是“/vagrant”,也就是Vagrantfile所在目录。使用vagrant共享出来的目录是支持符号连接的,问题解决了。

在vagrant里添加配置,允许符号链接

        <code>vb.customize [<span>"setextradata"</span>, :<span>id</span>, <span>"VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant"</span>, <span>"1"</span>] <span>#允许符号链接</span></code>
    

重点要来了,vagrant具体如何配置?

对于一个前端开发来说,整一个docker其实都挺费劲了,因为平时很少接触环境方面的配置,对于黑洞洞的终端很不习惯。接下来分享一下我的配置。

首先,安装vagrant、virtualBox。这个自行百度。不过需要注意的是,windows powershell要更新到powershell 4.x,.net 也要更新。

然后,讲vagrantfile放在项目目录同级,提前下载好centos.box,放在与项目同级目录,使用shell执行:

        <code>
            <span>$</span>
            <span> vagrant up</span>
        </code>
    

vagrant box下载:
https://app.vagrantup.com/box...

这是我的Vagrantfile,可以参考一下:

        <code>
            <span># -*- mode: ruby -*-</span>
            <span># vi: set ft=ruby :</span>
            <span># Vagrantfile API/syntax version. Don‘t touch unless you know what you‘re doing!</span> VAGRANTFILE_API_VERSION = "2"  Vagrant.configure(VAGRANTFILE_API_VERSION) <span>do</span> |config|   config.vm.box = <span>"../centos7.box"</span>    config.vm.provider :virtualbox <span>do</span> |vb|     vb.name = <span>"mbannianhui"</span>     vb.customize [<span>"modifyvm"</span>, :<span>id</span>, <span>"--memory"</span>, <span>1024</span>] <span>#修改虚拟机内存</span>     vb.customize [<span>"setextradata"</span>, :<span>id</span>, <span>"VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant"</span>, <span>"1"</span>] <span>#允许符号链接</span><span>end</span>    config.vm.network :private_network, ip: <span>"192.168.33.10"</span><span>#分配ip</span>   config.vm.network :forwarded_port, guest: <span>2333</span>, host: <span>2333</span><span>#设置端口</span>     config.vm.provision :shell, :inline => <<-EOT     <span>#</span><span># 安装docker:http://www.runoob.com/docker/centos-docker-install.html</span>          sudo yum <span>update</span>     curl -fsSL https://get.docker.com -o <span>get</span>-docker.sh     sudo sh <span>get</span>-docker.sh     sudo systemctl <span>start</span> docker   <span>#启动docker</span>     sudo systemctl <span>enable</span> docker  <span>#docker随系统启动而启动</span>   EOT <span>end</span></code>
    

这样,起来的虚拟机里,docker已经安装好了。查看docker是否成功安装:

        <code>
            <span>sudo</span> docker -v</code>
    

一些docker命令:

        <code>sudo docker run -v <span>/vagrant:/</span>app -p <span>3000</span>:<span>3000</span> --name demo -itd --add-host www.demo.<span>com:</span><span>127.0</span><span>.0</span><span>.1</span> --restart unless-stopped docker.sitename.net<span>/libname/</span>image</code>
    

说明:

        <code>
            <span>-v /vagrant:/app # 映射目录;‘/vagrant‘:vagrant默认的共享目录,也就是本机放置Vagrantfile文件的目录</span>
            <span>-p 3000:3000 : hostPort:containerPosrt ,指定端口</span>
            <span>--name demo 给容器起名字</span>
            <span>-itd 相当于-i -t -d : -i 以交互模式运行容器,-t为容器重新分配一个伪输入终端,-d后台运行容器</span>
            <span>--add-host www.demo.com:127.0.0.1 和windows配置host文件一样</span>
            <span>--restart unless-stopped  容器崩坏重启,除非手动stop</span>  docker.sitename.net/libname/image 远程仓库的地址,这里也可以是本地镜像名字,或者官方镜像名字。如果本地没有这个镜像,则先拉取</code>
    

问题:
如何访问docker容器跑起来的服务?
以上面为例,docker run时指定端口之后,在浏览器输入:
192.168.33.10:3000

 

 原文:https://segmentfault.com/a/1190000016300808

 

原文:https://www.cnblogs.com/chaoyong/p/10356721.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐