流浪汉:config.vm.provision不允许我将文件复制到etc / nginx / conf.d吗?

时间:2019-01-07 00:24:45

标签: nginx ubuntu-16.04 vagrantfile

我正在使用Nginx服务器。 我想使用Vagrantfile将配置文件复制到/etc/nginx/conf.d。 我使用的命令是:

config.vm.provision "file", source: "./bolt.local.conf", destination: "/etc/nginx/conf.d/bolt.local.conf"

我收到的错误是:

Failed to upload a file to the guest VM via SCP due to a permissions
error. This is normally because the SSH user doesn't have permission
to write to the destination location. Alternately, the user running
Vagrant on the host machine may not have permission to read the file.

我正在使用Bento / Ubuntu-16.04盒子。

我试图寻找一种方法来更改Provisioning命令的权限,但是我只找到了一种方法来更改config.vm.share_folder命令的所有者。

你知道答案吗?

1 个答案:

答案 0 :(得分:0)

根据错误消息的建议,并同时对documentation进行提示:

  

文件提供者上载的文件以SSH或PowerShell用户身份完成。这很重要,因为这些用户通常没有自己的提升特权。如果要将文件上传到需要提升特权的位置,我们建议将文件上传到临时位置,然后使用Shell配置程序将它们移动到位。

因此,vagrant用户(如果未修改)用于scp文件,但无法使用它访问/etc/

要使其正常工作,您需要将其上传到一个临时位置,然后使用Shell Provisioner将其移动到目标目录:

config.vm.provision "file", 
  source: "./bolt.local.conf", 
  destination: "/tmp/bolt.local.conf"

config.vm.provision "shell",
  inline: "mv /tmp/bolt.local.conf /etc/nginx/conf.d/bolt.local.conf"

这项工作是因为shell provisionersprivileged选项默认为true。但是,只有两个配置者只是为了复制配置文件,这有点令人费解。

但是请注意,如果文件已经在您的共享文件夹中,则可以使用Shell Provisioner将其复制到nginx目录中,这样您将得到如下结果:

# This is the default and serve just as a reminder
config.vm.synced_folder ".", "/vagrant"
config.vm.provision "shell",
  inline: "cp /vagrant/bolt.local.conf /etc/nginx/conf.d/bolt.local.conf"