gpt4 book ai didi

docker - 在MacOS上使用docker作为提供程序的游民,无法在容器中挂载目录

转载 作者:行者123 更新时间:2023-12-02 19:41:46 32 4
gpt4 key购买 nike

我使用的是vagrant,而不是说docker-compose,因为vagrantfile是ruby文件,它提供了更大的灵活性

我的Vagrantfile看起来像这样

Vagrant.configure(2) do |config|

config.vm.define "db" do |app|
app.vm.provider "docker" do |d|
d.image = "postgres:9.5"
d.name = "myproject_db"
d.env = {
'POSTGRES_USER' => "admin",
'POSTGRES_PASSWORD' => "password",
}
end
end

config.vm.define "fpm" do |app|
app.vm.provider "docker" do |d|
d.build_dir = "dockerfiles/php-fpm/"
d.name="myproject_fpm"
d.link "myproject_db:db"
d.volumes = [
"#{ENV['PWD']}/myproject:/var/www/symfony2",
]
end
end

end

在Linux硬件主机上时,它工作得很好,但是在Mac上,它失败了,因为 vagrant up --provider docker将启动一个中间linux盒来运行docker。因此它将失败,因为
 d.volumes = [
"#{ENV['PWD']}/myproject:/var/www/symfony2",
]

从MacOS计算机上获取 #{ENV['PWD']},但在linux机器上运行它,因此该路径不存在并且失败。但是我不能给出相对路径,因为 docker 需要一个绝对路径

那么有什么解决方法吗? (除了创建自己的virtualbox之外,我然后在其上安装vagrant并从那里运行命令)

最佳答案

默认情况下,Vagrant Docker提供程序使用boot2docker在Windows和MacOS计算机上托管Docker。但是您可以使用vagrant_vagrantfile参数为Docker主机VM指定自定义Vagrant文​​件。那是:

d.vagrant_vagrantfile = "../path/to/Vagrantfile"

在此Vagrantfile中,您可以将文件夹同步(在MacOS和Docker Host VM之间)配置为可以在Docker卷配置中使用的某个已知绝对路径。

要使其基于Vagrant Host OS有条件,可以将其放在IF块中:
if /darwin/.match(RUBY_PLATFORM)
#MACOS optional configuration
elsif /mingw|mswin/.match(RUBY_PLATFORM)
#Windows optional configuration
else
#everything else, most probably Linux
end

关于docker - 在MacOS上使用docker作为提供程序的游民,无法在容器中挂载目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34372756/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com