如何解决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里添加配置,允许符号链接

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

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

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

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

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

$ vagrant up

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

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

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

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

sudo docker -v

一些docker命令:

sudo docker run -v /vagrant:/app -p 3000:3000 --name demo -itd --add-host www.demo.com:127.0.0.1 --restart unless-stopped docker.sitename.net/libname/image

说明:

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

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

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

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

时间: 2024-10-09 19:49:57

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

解决 Windows Docker 安装 Gitlab Volume 权限问题

本文首发于我的个人博客,解决 Windows Docker 安装 Gitlab Volume 权限问题 ,欢迎访问! 记录一下 Windows10 下 Docker 安装 Gitlab 的步骤. Caution: We do not officially support running on Docker for Windows. There are known issues with volume permissions, and potentially other unknown issue

在Linux下挂载Windows系统共享目录

在Linux下挂载Windows系统共享目录 默认情况下,Linux服务器会装有samba-client,但是没有装samba-server.但是访问Windows系统共享,安装有samba-client就可以了. [[email protected] ~]# rpm -qa | grep samba samba-3.6.23-14.el6_6.x86_64 samba-client-3.6.23-14.el6_6.x86_64 samba-common-3.6.23-14.el6_6.x86_

VirtualBox下Linux加载Windows的共享目录

1.Windows下,在VirtualBox安装增强功能. 菜单 -> 设备 -> 安装增强功能 2.Windows下,在VirtualBox设置共享目录. 设置 -> 共享文件夹 -> 添加 -> 选择“共享文件夹路径” 例如:选择的是F:\MyWinShare目录,那么共享文件夹名称就是MyWinShare 3.Linux下,在终端输入: sudo mkdir /mnt/MyLinuxShare sudo mount -t vboxsf MyWinShare /mnt/M

Linux中挂载Windows里共享目录

将Windows里的F:\sadoc文件夹右键点击设置为共享目录,共享用户为administrator # yum -y install cifs-utils    #安装mount.cifs软件包 # mkdir /windows         #创建挂载目录windows # mount.cifs //10.0.0.1/sadoc /windows/ -o user=administrator,pass=linux  #pass=linux为Windows里administrator用户的

Linxu:在Linux下访问Windows的共享目录

在 Windows xp 上设置一个共享目录 共享目录:d:\myfiles 在 Linux 下安装 samba-client 客户端 yum install samba-client 安装 cifs-utils 软件包 yum install cifs-utils 在 Linux 下创建一个挂载点 mkdir /mnt/Windows 挂载 Windows 上的共享目录 挂载 Windows 上的共享目录 d:\myfiles 到 Linux 下的/mnt/Windows 目录下 mount

使用jcifs.smb.SmbFile读取Windows上共享目录的文件

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { OutputStream stream = null; BufferedInputStream buf = null; try { stream = response.getOutputStream(); response.setContentT

转载一篇解决windows和centos虚拟机共享主机目录问题的方法,方法不同于ubuntu虚机

在centos虚机安装vmtools过程中有如下报错 /tmp/modconfig-ygOywn/vmhgfs-only/inode.c: 在函数'HgfsPermission'中: tmp/modconfig-ygOywn/vmhgfs-only/./shared/compat_dcache.h:57:38: 错误:'struct dentry'没有名为'd_count'的成员 #define compat_d_count(dentry) dentry->d_count ^ /tmp/modc

搭建NFS共享目录,解决wordpress负载均衡图片上传问题

1.剧情回顾 在之前的博客里面,我搭建了两个WEB服务器,然后在前端搭建了一个Nginx负载均衡服务器,用来分发请求给两个不同的服务器(http://blog.51cto.com/superpcm/2095324).之前的测试没有问题,原因在于测试程序是单纯的静态网站,不会发生变动的静态网站.后来我搭建在两台WEB上都搭建了wordpress服务,然后上传图片的时候做测试.发现图片上传只传到其中的一台服务器上(比如说web01),当我关闭web01的时候,web02就没法看到看到那个图片了. 这

Windows与VBox虚拟机共享目录的方法

前言 安装完虚拟机,设置共享目录的时候碰到问题,网上搜索了一下,按照相关教程操作还是有问题,可能是写的不够清楚,于是按照自己的理解重写了一份,力求简单明了,理解轻松. 具体步骤 1.关闭虚拟机(如果未启动忽略此步骤) 2.虚拟机光驱插入VBox安装目录下的VBoxGuestAdditions.iso 3.启动虚拟机,挂载虚拟光驱,进入光驱目录,执行光驱里的shell脚本 [[email protected] wadeyu]# mkdir /mnt/cdrom [[email protected]