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

标签 docker vagrant boot2docker

我使用的是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/

相关文章:

python - 为什么 'fig build'返回:AttributeError: 'WrappedSocket'对象没有属性 'recvfrom'?

.net - 如何在 gitlab 中的 .net 解决方案构建管道中运行 git 命令

docker - 使用docker时无法访问phpmyadmin

nginx - 具有自定义网络的 Docker 代理

github - 在 vagrant 中创建的哪些文件夹或文件不应推送到 GitHub 上的存储库中

ubuntu - 无法使用新的 Vagrant 安装 - 连接到 libvirt 时出错

linux - 是否可以禁止来自 docker 日志的特定消息?

shell - Vagrant 抑制 shell 供应商的非零退出状态

linux - Docker 命令在 Windows 7 上不可用

mongodb - 带有mongod的ENTRYPOINT和CMD命令导致未知的选项错误