我正在尝试利用 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-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
很可能您很久以前就已经找到了问题的解决方案,但只是认为这个答案可以帮助您或其他人:-)。