【问题标题】:Vagrant docker provider slow buildVagrant docker 提供者构建缓慢
【发布时间】:2015-10-02 06:42:12
【问题描述】:

我正在尝试在 Windows 机器上将 Vagrant 与 docker 提供程序一起使用。 我有这样的 Vagrantfile:

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker'
Vagrant.require_version ">= 1.6.0"
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.define "app" do |app|
        app.vm.provider "docker" do |d|
            d.name = "app"
            d.build_dir = "."
            d.vagrant_machine = "dockerhost"
            d.vagrant_vagrantfile = "./DockerhostVagrantfile"
        end
    end
end

Docker 主机定义如下:

Vagrant.configure("2") do |config|
    config.vm.synced_folder ".", "/vagrant", type: "smb"
    config.vm.provision "docker"
    config.vm.define "dockerhost"
    config.vm.box = "ubuntu/trusty64"
    config.vm.network "forwarded_port",
    guest: 8080, host: 8080
    config.vm.provider :virtualbox do |vb|
      vb.name = "dockerhost"
    end
end

还有像这样的 Docker 容器:

FROM ubuntu:14.04

WORKDIR /vagrant/application
# .... install stuff
EXPOSE 8080

CMD ["/bin/bash"]

问题是每当我执行vagrant docker-run app -- bash 并且必须重建 dockerimage 时,这个过程都需要很长时间。

// ....
app: Sending build context to Docker daemon 180.5 MB
app: Sending build context to Docker daemon   181 MB
app: Sending build context to Docker daemon 181.6 MB
// ....

我认为这是因为dockerhost 中的文件夹是用vboxfs 挂载的(我发现这非常慢)。

有什么办法可以强制 Vagrant 使用smb

性能问题是由其他原因引起的吗?

【问题讨论】:

    标签: docker vagrant vagrantfile dockerfile vagrant-windows


    【解决方案1】:

    最后我找到了一个解决方案,如何使用smb 而不是vboxfs 挂载docker build directory

    正如这里所说的https://github.com/mitchellh/vagrant/commit/745bdf676675e7b1f25fd7df5a4ed48b582b6dc7

    可以定义host_vm_build_dir_options 属性。所以我像这样修改了我的Vagrantfile

    ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker'
    Vagrant.require_version ">= 1.6.0"
    VAGRANTFILE_API_VERSION = "2"
    Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
        config.vm.define "app" do |app|
            app.vm.provider "docker" do |d|
                d.name = "app"
                d.build_dir = "."
                d.vagrant_machine = "dockerhost"
                d.vagrant_vagrantfile = "./DockerhostVagrantfile"
                d.host_vm_build_dir_options = {
                    type: "smb"
                }
            end
        end
    end
    

    无论如何,速度的真正问题是由于在我的项目根目录中包含Dockerfile 引起的,因此所有文件都被发送到主机。我通过将它移动到只有 Dockerfile 的 Docker 文件夹解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 2015-01-25
      • 1970-01-01
      相关资源
      最近更新 更多