docker - Vagrant 的docker提供程序构建缓慢

标签 docker vagrant vagrantfile dockerfile vagrant-windows

我正在尝试在Windows计算机上将Vagrant与docker provider一起使用。
我有这样的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

性能问题是否还由其他原因引起?

最佳答案

最后,我找到了一个解决方案,该方法如何使用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文件夹中解决了这一问题。

关于docker - Vagrant 的docker提供程序构建缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31392887/

相关文章:

linux - 协助使用简单的 Bash 脚本

vagrant - 单个 Vagrant 文件中的多个提供者?

Vagrant+Puppet puppet.module_path 不起作用

docker - docker中的Spring Boot应用程序立即终止

Vim 撕裂 tmux Pane 的显示

docker - 如何在PyCharm IDE中浏览Docker容器?

node.js - 使用 ember new 时 EPROTO : protocol error, 符号链接(symbolic link) '../semver/bin/semver'

Vagrant 和同步文件夹 : How to set the owner to a user other than the default vagrant user?

docker - 是否可以为所有用户下载 Docker?

docker - 手动安装后可以在docker中保存吗?