资讯专栏INFORMATION COLUMN

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

MadPecker / 2218人阅读

摘要:使用,搭建前端开发环境时,在共享目录使用安装前端依赖时,发现报错,无法使用符号连接。使用共享出来的目录是支持符号连接的,问题解决了。

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://www.ucloud.cn/yun/27432.html

相关文章

  • 搭建Docker私有仓库

    摘要:配置项数据持久化支持登录授权验证测试做代理我的方式和遇到的问题作为一个容器其它方案相关链接官方提供了镜像,可以方便的搭建私有仓库,详细文档参考这里。支持为了使得私有仓库安全地对外开放,需要配置支持。 摘要 这篇文章内容包括搭建docker私有仓库的一些配置项和遇到的问题及解决方案。 1.配置项 1.1. 数据持久化 1.2. TLS 支持 1.3. 登录授权验证 1.4. docker...

    fizz 评论0 收藏0
  • docker系列--namespace解读

    摘要:目前内核总共实现了种隔离和消息队列。参数表示我们要加入的的文件描述符。提供了很多种进程间通信的机制,针对的是和消息队列。所谓传播事件,是指由一个挂载对象的状态变化导致的其它挂载对象的挂载与解除挂载动作的事件。 前言 理解docker,主要从namesapce,cgroups,联合文件,运行时(runC),网络几个方面。接下来我们会花一些时间,分别介绍。 docker系列--names...

    wupengyu 评论0 收藏0
  • docker系列--namespace解读

    摘要:目前内核总共实现了种隔离和消息队列。参数表示我们要加入的的文件描述符。提供了很多种进程间通信的机制,针对的是和消息队列。所谓传播事件,是指由一个挂载对象的状态变化导致的其它挂载对象的挂载与解除挂载动作的事件。 前言 理解docker,主要从namesapce,cgroups,联合文件,运行时(runC),网络几个方面。接下来我们会花一些时间,分别介绍。 docker系列--names...

    cikenerd 评论0 收藏0

发表评论

0条评论

MadPecker

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<