Najprostszy sposób na skopiowanie pojedynczego pliku z hosta na Vagrant guest?
Mam przypadek użycia, w którym od czasu do czasu chcę skopiować pojedynczy plik z komputera hosta do Gościa włóczęgi.
Nie chcę tego robić za pomocą tradycyjnych provisionerów (Puppet / Chef), ponieważ często jest to jednorazowy ... chcę tylko coś szybkiego dodać do mojego Vagrantfile.
Nie chcę udostępniać całego katalogu, być może dlatego, że chcę nadpisać istniejący plik bez nukowania całego katalogu gościa.
Napisanie powłoki też wydaje się trochę przesadą skrypt provisioning, i radzić sobie z ewentualnym ucieczki, gdy wszystko, co chcę zrobić, to skopiować plik.
Jaki jest najprostszy sposób na skopiowanie pojedynczego pliku z hosta do gościa?
15 answers
Zamiast kopiowania pliku za pomocą provisionera powłoki, możesz również użyć provisionera pliku Vagrant .
Nazwa dostawcy:
"file"
Provisioner plików umożliwia przesyłanie pliku z komputera hosta do komputera gościa.
Vagrant.configure("2") do |config|
# ... other configuration
config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-07 16:35:06
Ponieważ prosisz o najprostszy sposób, sugeruję użycie Vagrant-scp. Dodaje polecenie scp do vagrant, dzięki czemu można kopiować pliki do maszyny wirtualnej, tak jak normalnie robi się to z scp.
Zainstaluj przez:
vagrant plugin install vagrant-scp
Użyj go tak:
vagrant scp <some_local_file_or_dir> [vm_name]:<somewhere_on_the_vm>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-26 19:57:22
Istnieje o wiele prostsze rozwiązanie. Zobacz https://gist.github.com/colindean/5213685/#comment-882885 :
" proszę zauważyć, że jeśli z jakiegoś powodu nie chcesz scp, najprostszym sposobem na przesyłanie plików z hosta do maszyny Wirtualnej jest umieszczenie ich w tym samym katalogu co plik Vagrantfile - ten katalog jest automatycznie montowany w / vagrant w maszynie wirtualnej, dzięki czemu możesz kopiować lub używać ich bezpośrednio z maszyny wirtualnej."
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-21 15:33:24
Domyślnie pierwsza instancja vagrant używa portu ssh jako 2222, a jej adres ip to 127.0.0.1 (może być konieczne dostosowanie portu za pomocą prawdziwego wirtualnego hosta)
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
Więc możesz uruchomić poniższe polecenie, aby skopiować lokalny plik do instancji vagrant. hasło jest takie samo jak nazwa użytkownika, która jest vagrant
.
scp -P 2222 your_file [email protected]:.
Możesz również skopiować plik z powrotem do lokalnego hosta.
scp -P 2222 [email protected]:/PATH/filename .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-19 00:58:05
Oto moje podejście do problemu:
Krok 1-Znajdź klucz prywatny, port ssh i adres IP:
root@vivi:/opt/boxes/jessie# vagrant ssh-config
Host default
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /root/.vagrant.d/insecure_private_key
IdentitiesOnly yes
LogLevel FATAL
Krok 2-Prześlij plik używając portu i klucza prywatnego jako parametrów dla scp:
scp -P 2222 -i /root/.vagrant.d/insecure_private_key \
someFileName.txt [email protected]:~
Mam nadzieję, że to pomoże,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-01 22:28:11
Skończyło się na tym, że zatrzymałem plik w moim katalogu vagrant (automatycznie montowany jako / vagrant/) i skopiowałem go za pomocą provisionera powłoki:
command = "cp #{File.join('/vagrant/', path_within_repo)} #{remote_file}"
config.vm.provision :shell, :inline => command
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-23 05:14:32
Jeśli nie możesz mieć plików w katalogu, możesz uruchomić ten kod w pliku skryptu z komputera hosta.
#!/bin/sh
OPTIONS=`vagrant ssh-config | awk -v ORS=' ' '{print "-o " $1 "=" $2}'`
scp ${OPTIONS} /File/To/Copy vagrant@YourServer:/Where/To/Put/File
W tej konfiguracji wystarczy zmienić /File/To/Copy
na plik lub pliki, które chcesz skopiować, a następnie /Where/To/Put/File
jest lokalizacją na maszynie wirtualnej, do której chcesz skopiować pliki.
Jeśli utworzysz ten plik i nazwiesz go copyToServer.sh
, Możesz następnie uruchomić polecenie sh
, aby wypchnąć te pliki.
sh ./copyToServer.sh
Jako ostatnia uwaga, nie możesz uruchomić tego kodu jako provisioner
ponieważ działa na serwerze gościa, podczas gdy ten kod działa z hosta.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-24 20:43:01
Możesz dodać wpis w ~/.ssh/config
:
Host vagrant
User vagrant
HostName localhost
Port 2222
IdentityFile /home/user_name/.vagrant.d/insecure_private_key
I proste scp file vagrant:/path/
. Możesz znaleźć ścieżkę do pliku tożsamości za pomocą polecenia vagrant ssh-config
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-30 13:26:40
Vagrant umożliwia wykonanie polecenia przez ssh zamiast logowania się, więc dla hosta Linuksa i gościa możesz użyć:
- od gospodarza do gościa:
cat ~/file_on_host.txt | vagrant ssh -c 'cat - > ~/file_on_guest.txt'
- od gościa do gospodarza:
vagrant ssh -c 'cat ~/file_on_guest.txt' > ~/file_on_host.txt
Nie ma potrzeby instalowania wtyczek ani przeładowywania gości. Po prostu upewnij się, aby podać identyfikator Vagrant box do 'Vagrant ssh', jeśli nie jesteś w tym samym katalogu co plik Vagrantfile. Testowane na Vagrant v1.8. 1.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-04 12:09:56
Jeśli z jakichś powodów nie masz uprawnień do używania
vagrant plugin install vagrant-scp
Istnieje alternatywny sposób:
Najpierw vagrant up yourVagrantProject , a następnie napisz w terminalu:
vagrant ssh-config
Będziesz miał informacje o "nazwie hosta" i "Porcie" Twojej maszyny wirtualnej.
W niektórych przypadkach, możesz mieć kilka maszyn wirtualnych w swoim projekcie. Więc po prostu znajdź swoją maszynę główną (ogólnie rzecz biorąc, ta maszyna wirtualna ma port 2222 ) i nie zwracaj uwagi na inne maszyny informacje.
Zapisz polecenie, aby wykonać kopię:
scp -P xxPortxx /Users/where/is/your/file.txt vagrant@xxHostNamexx:/home/vagrant
Na tej stromie będziesz musiał umieścić hasło włóczęgi : domyślnie jest to "vagrant"
Następnie, jeśli spojrzysz na pliki w maszynie wirtualnej:
vagrant ssh xxVirtualMachineNamexx
pwd
ls
Będziesz miał " plik.txt " w katalogu maszyn wirtualnych
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-03 11:02:33
Przejdź do katalogu gdzie masz swoje Vagrantfile
Następnie Edytuj swój Vagrantfile
i dodaj:
config.vm.synced_folder ".", "/vagrant", :mount_options => ['dmode=774','fmode=775']
"." oznacza katalog, w którym aktualnie znajdujesz się na swojej maszynie hosta
"/Vagrant " odnosi się do" /home/vagrant " na guest machine (Vagrant machine).
Skopiuj pliki, które musisz wysłać do guest machine do folderu, w którym masz swoje Vagrantfile
Następnie otwórz Git Bash i cd
do katalogu, w którym masz swój Vagrantfile
i typ:
vagrant scp config.json XXXXXXX:/home/vagrant/
Gdzie XXXXXXX jest twoją nazwą vm. Nazwę maszyny Wirtualnej można uzyskać, uruchamiając
vagrant global-status
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-03 18:59:16
Wtyczka Vagrant scp działa, jeśli znasz nazwę swojego pudełka vagrant. zaznacz Vagrant global-status, który poda nazwę twojej skrzynki, a następnie możesz uruchomić:
vagrant global-status
id name provider state directory
------------------------------------------------------------------------
13e680d **default** virtualbox running /home/user
Vagrant scp ~/foobar "name in my case default":/home/"user" /
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-11 10:08:22
Spróbuj tego.. vagrant ubuntu 14.04 To mi pomogło.
scp -r -P 2222 vagrant@localhost:/home .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-06 17:59:31
Alternatywny sposób, aby to zrobić bez instalowania czegokolwiek (vagrant-scp
itp.) Zauważ, że nazwa default
musi być używana tak jak jest, ponieważ vagrant ssh-config
to emituje.
vg_scp() {
tmpfile=$(mktemp /tmp/vagrant-ssh-config.XXXX)
vagrant ssh-config > $tmpfile
scp -F $tmpfile "$@"
rm $tmpfile
}
# Copy from local to remote
vg_scp somefile default:/tmp
# Copy from remote to local
vg_scp default:/tmp/somefile ./
# Copy a directory from remote to local
vg_scp -r default:/tmp ./tmp
Funkcja nie byłaby potrzebna, gdyby scp -F =(vagrant ssh-config) ...
działała na powłokach. Ale ponieważ nie jest to obsługiwane przez Bash, musimy uciekać się do tego obejścia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-20 16:55:30
Najlepszy sposób na skopiowanie pliku z lokalnego do vagranta, bez potrzeby pisania kodu, jakichkolwiek rzeczy lub jakichkolwiek zmian konfiguracyjnych. 1-First up the vagrant ( vagrant up ) 2-otwarty cygwin 3-cygwin: przejdź do folderu gdzie jest vagrantfile lub z którego uruchamiasz vagrant 4- SSH vagrant 5 - Teraz będzie działać jak normalny system.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-10 11:02:11