Бродяга: config.vm.provision не позволяет мне копировать файл в etc / nginx / conf.d? - PullRequest
0 голосов
/ 07 января 2019

Я работаю с сервером Nginx. Я хочу скопировать файл конфигурации в /etc/nginx/conf.d с помощью Vagrantfile. Я использую команду:

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.

Я пытался найти способ изменить разрешения для команды предоставления, но я нашел только способы изменить владельца команды config.vm.share_folder.

Знаете ли вы ответ?

1 Ответ

0 голосов
/ 08 января 2019

Как следует из сообщения об ошибке, а также указание документации :

Загрузка файлов провайдером файлов выполняется от имени пользователя SSH или PowerShell. Это важно, поскольку эти пользователи обычно не имеют повышенных привилегий самостоятельно. Если вы хотите загружать файлы в местоположения, для которых требуются повышенные привилегии, мы рекомендуем загрузить их во временные местоположения, а затем с помощью поставщика оболочки для их перемещения.

Таким образом, пользователь vagrant (если не изменен) используется для поиска файла, но не может получить к нему доступ /etc/.

Чтобы заставить его работать, вам нужно загрузить его во временное местоположение, а затем с помощью поставщика оболочки переместить его в целевой каталог:

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"

Это работает, потому что параметр privileged по умолчанию имеет значение true для инициаторов оболочки . Но немного сложнее иметь двух провайдеров, чтобы просто скопировать файл конфигурации.

Но учтите, что если файл уже находится в вашей общей папке, вы можете просто использовать поставщика оболочки для копирования его в каталог 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"
...