[英]How to find the Vagrant IP?
我一直在使用 Capistrano 開發自動化部署,並使用 Vagrant 作為我的測試虛擬服務器。
問題是,我需要 Vagrant 的 IP 來“ ssh
進入”。
我嘗試了ifconfig
並獲得了 IP,但看起來它不是確切的流浪 IP。
有人可以幫我獲得 Vagrant IP 嗎?
默認情況下,vagrant box 沒有任何 IP 地址。 為了找到 IP 地址,您只需在Vagrantfile
分配 IP 地址,然后調用vagrant reload
如果您只需要從主機訪問流浪機器,則只需要設置一個“專用網絡”即可。 取消注釋默認Vagrantfile
的相應行,或添加此代碼段。 如果您希望您的 VM 出現在172.30.1.5
,它將是以下內容:
config.vm.network "private_network", ip: "172.30.1.5"
了解有關專用網絡的更多信息。 https://www.vagrantup.com/docs/networking/private_network.html
如果您需要在主機外部訪問 vagrant,例如針對 iOS 或 Android 等移動設備進行開發,則必須啟用公共網絡,您可以使用靜態 IP,例如192.168.1.10
或 DHCP。
config.vm.network "public_network", ip: "192.168.1.10"
了解有關配置公共網絡的更多信息https://www.vagrantup.com/docs/networking/public_network.html
我發現我確實需要 IP 才能在主機系統上配置/etc/hosts
以指向新 VM 上的服務。
這是我用來獲取 IP 的粗略版本。 讓 Vagrant 發揮它的 SSH 魔法並詢問 VM 的地址; 根據您的需要進行調整。
new_ip=$(vagrant ssh -c "ip address show eth0 | grep 'inet ' | sed -e 's/^.*inet //' -e 's/\/.*$//'")
我剛剛在Vagrant Docs 中找到了這個。 看起來他們認為這是一種有效的方法:
這將自動從保留的地址空間分配一個 IP 地址。 可以通過使用 vagrant ssh SSH 進入機器並使用適當的命令行工具查找 IP 來確定 IP 地址,例如 ifconfig。
跑步:
vagrant ssh-config > .ssh.config
然后在config/deploy.rb
role :web, "default"
role :app, "default"
set :use_sudo, true
set :user, 'root'
set :run_method, :sudo
# Must be set for the password prompt from git to work
default_run_options[:pty] = true
ssh_options[:forward_agent] = true
ssh_options[:config] = '.ssh.config'
打開一個終端,cd 到你的 Vagrantfile 的路徑並寫下這個
(Linux)
vagrant ssh -c "hostname -I | cut -d' ' -f2" 2>/dev/null
(OS X)
vagrant ssh -c "hostname -I | cut -d' ' -f2" 2>/dev/null | pbcopy
Linux 的命令也適用於 Windows。 我沒有辦法測試,抱歉。
來源: https : //coderwall.com/p/etzdmq/get-vagrant-box-guest-ip-from-host
我為此開發了一個小的vagrant-address插件。 它簡單、跨平台、跨提供商,並且不需要編寫腳本。
在終端類型中:
ip addr show
我在 VagrantFile 做過:
REMOTE_IP = %x{/usr/local/bin/vagrant ssh-config | /bin/grep -i HostName | /usr/bin/cut -d\' \' -f4}
run "ping #{REMOTE_IP}"
如您所見,我使用了“%x{}” ruby 函數。
終止使用vagrant ssh
打開的連接將顯示地址,因此可以執行虛擬或空命令:
$ vagrant ssh -c ''
Connection to 192.168.121.155 closed.
我們使用 VirtualBox 作為提供者,對於虛擬框,您可以使用VBoxManage
來獲取 IP 地址
VBoxManage guestproperty get <virtual-box-machine-name> /VirtualBox/GuestInfo/Net/1/V4/IP
我需要知道這一點才能告訴用戶將什么添加到他們主機的主機文件中。 這對我在 vagrant 中只使用 bash 有效:
external_ip=$(cat /vagrant/config.yml | grep vagrant_ip | cut -d' ' -f2 | xargs)
echo -e "# Add this line to your host file:\n${external_ip} host.vagrant.vm"
因為我還沒有在這里看到它......當你將vagrant ssh
放入盒子中時,我意識到它實際上告訴你接口的 ip 地址。 你可以在那里得到它。 例如。
{~/Documents/jupyterhub-ansible} (features *%)$ vagrant ssh
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-50-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Wed May 22 12:00:34 UTC 2019
System load: 0.12 Processes: 101
Usage of /: 56.5% of 9.63GB Users logged in: 0
Memory usage: 19% IP address for enp0s3: 10.0.2.15
Swap usage: 0% IP address for enp0s8: 192.168.33.10
10 packages can be updated.
1 update is a security update.
Last login: Wed May 22 12:00:04 2019 from 192.168.33.1
vagrant@ubuntu-bionic:~$
在我的流浪文件中,我分配了這樣的地址:
config.vm.network "private_network", ip: "192.168.33.10"
如您所見, IP address for enp0s8: 192.168.33.10
我遇到了這樣的事情,所以我在 Vagrant 框中添加了 run bash 腳本,並在主機文件夾中輸出公共 IP 地址文件。
在 Vagrantfile 中添加這個
...
config.vm.provision "shell", path: "public-ip.sh"
config.vm.synced_folder '.', '/vagrant'
...
在同一個 Vagrantfile 文件夾中創建 bash 腳本名稱 public-ip.sh
#!/bin/bash
# change eth1 to your desired network interface, in my vagrantfile i have first NAT and second is bridge dhcp network and i want to know random dhcp IP.
box_ip=$(ip address show eth1 | grep 'inet ' | sed -e 's/^.*inet //' -e 's/\/.*$//')"
echo "$box_ip" | tee public_ip.txt
echo "add box ip to your host machine /etc/hosts entry so you can connect the box using box hostname"
當您執行 vagrant up 時,您將看到公共 ip 或私有 ip 框的 vagrant 輸出,並且您可以在框的任何時候使用它在主機入口處添加它
我知道這篇文章很舊,但我想為此補充幾點!
你可以試試
vagrant ssh -c "ifconfig | grep inet" hostname
如果您為您的客人單獨設置了一個名字,這將很容易!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.