在 Vagrant 中的 docker-compose 中设置卷

问题描述 投票:0回答:1

我正在尝试利用 Vagrant 中内置的 docker-compose 提供程序支持(不是此处的配置程序或扩展程序:https://github.com/leighmcculloch/vagrant-docker-compose

据我了解,vagrant 提供程序配置与 compose_configuration 合并以生成 docker-compose.yml,然后由 docker-compose 执行。

但是 docker-compose 中的某些功能似乎无法在 vagrant 配置中指定,例如命名卷。如果我有这个:

config.vm.provider "docker" do |d|
  d.build_dir = "." 
  d.has_ssh = true
  d.compose = true
  d.volumes = ["~/web:/web-host"]
  d.compose_configuration = {
      "version" => '2', 
      "services" => {
            "default" => {
                "volumes" => [
                  "dragonfly:~/public/dragonfly" ]
             }
      }
  }

}

我希望 vagrant 合并这两个卷,但它似乎只是覆盖了生成的 docker-compose.yml 中的 compose_configuration 卷,所以我最终得到:

default:
  volumes:
    - "~/web:/vagrant"

我不知道 /vagrant 路径来自哪里。

并且 docker 命名卷无法在主 vagrant 配置中设置,因为它们不受支持。

那么我应该在哪里设置卷以便将它们传递到 docker-compose 中?

docker docker-compose vagrant
1个回答
0
投票

您是否尝试仅将 docker-compose 用于容器主机文件夹同步目的?我实际上正在尝试这样做;这就是我最初看到这篇文章的方式。

如果是这种情况,您可以简单地在

config.vm.synced_folder
中使用 Vagrant
Vagrantfile
属性,如here所指定。

这是一个

Vagrantfile
的示例,它使用 Docker 作为提供程序并将某些主机文件夹与 Docker 容器文件夹同步:

Vagrant.configure("2") do |config|
  config.vm.synced_folder "host/folder", "/container/folder"
  config.vm.provider "docker" do |d|
    # Docker configuration options go here
  end
end

host/folder
可以是绝对路径或相对路径(相对于项目根目录)。
/container/folder
必须始终是绝对路径。请检查上述文档以了解有关此事的更多详细信息。

关于您对

/vagrant
路径的疑问:默认情况下,Vagrant 会将主机上的项目文件夹与容器的
/vagrant
文件夹同步。如果您想禁用此同步,您需要在您的
Vagrantfile
处指定以下行:

config.vm.synced_folder ".", "/vagrant", disabled: true

很可能您很久以前就已经找到了问题的解决方案,但只是认为这个答案可以帮助您或其他人:-)。

© www.soinside.com 2019 - 2024. All rights reserved.