【问题标题】:Setting the ip of a RHEL box from a Vagrant script从 Vagrant 脚本设置 RHEL 盒子的 ip
【发布时间】:2016-09-19 08:21:57
【问题描述】:

我已经预配置了一个 RHEL 映像,我不知道它最初是如何设置的。 默认情况下,它在 ip 192.168.50.50 上配置了本地网络接口。我想做的是从 Vagrant 脚本配置它的 ip。

这似乎没有任何作用:

config.vm.network "private_network", ip: "192.168.50.10"

这确实改变了ip:

sudo nmcli con mod bond0 ipv4.addresses 192.168.50.10/24
service network restart

但是在那之后显然 Vagrant 不会自动检测到要连接的 ip,所以我需要添加:

config.ssh.host = LOCAL_IP

但问题是:第一次时,ip 是默认的 (.50.50)。所以我还不能将config.ssh.host 设置为我想要的IP。如果我省略了 config.ssh.host 行,它会第一次运行,但不会在之后运行,vagrant ssh 也会失败。

有没有办法在第一个vagrant up和第二个vagrant up之间不编辑Vagrant脚本就可以设置盒子ip?


编辑vagrant up --debug 命令的结果:http://pastebin.com/BTccc4NT


编辑:问题在于默认框中的 Vagrant 文件(在 Windows 上,位于 C:\Users\user\.vagrant.d\boxes\nameofbox\virtualbox\Vagrantfile)本身有以下行:

config.vm.network "private_network", ip: "192.168.50.50", auto_config: false

【问题讨论】:

  • 通常config.vm.network "private_network", ip: "192.168.50.10" 应该可以解决问题,因此可能还有其他问题,您是否有强制 ip 的配置脚本?你能运行vagrant up --debug &> vagrant.log 并将日志文件发布到 pastebin 的某个地方吗(文件会非常大,但如果正确运行正确的命令会详细说明)
  • 谢谢。我附上了日志。我现在无法对此进行进一步的调查,我明天再做。我可以看到 192.168.50.10 字符串出现在日志中,但不能真正说出它的含义。

标签: linux networking ssh vagrant rhel


【解决方案1】:

嗯,很奇怪,它创建了 2 个接口

DEBUG network: Normalized configuration: {:adapter_ip=>"192.168.50.1", :auto_config=>false, :ip=>"192.168.50.50", :mac=>nil, :name=>nil, :netmask=>"255.255.255.0", :nic_type=>nil, :type=>:static, :adapter=>2}
 INFO network: Searching for matching hostonly network: 192.168.50.50
 INFO subprocess: Starting process: ["C:/Program Files/Oracle/VirtualBox/VBoxManage.exe", "list", "hostonlyifs"]

......

DEBUG network: Normalized configuration: {:adapter_ip=>"192.168.50.1", :auto_config=>true, :ip=>"192.168.50.10", :mac=>nil, :name=>nil, :netmask=>"255.255.255.0", :nic_type=>nil, :type=>:static, :adapter=>3}
 INFO network: Searching for matching hostonly network: 192.168.50.10
 INFO subprocess: Starting process: ["C:/Program Files/Oracle/VirtualBox/VBoxManage.exe", "list", "hostonlyifs"]

在adapter2上你有192.168.50.50,在adapter3上你有192.168.50.10

可能的原因是您使用的盒子有一个特定的Vagrantfile,它已经在静态地址上定义了一个网络。

我不完全熟悉 windows,但在 mac 上,框定义在 ~/.vagrant/boxes/<yourbox>/<theprovider>/Vagrantfile 下(注意这不是您项目中的 Vagrantfile,这实际上是一个 Vagrantfile,它将应用于从该框构建的任何 VM) ;检查文件并删除网络配置(如果看到)

作为documented,Vagrantfile 是从不同位置合并的

在每个级别,设置集将与以前的值合并。这究竟意味着什么取决于设置。对于大多数设置,这意味着较新的设置会覆盖较旧的设置。 但是,对于诸如定义网络之类的事情,网络实际上是相互附加的。默认情况下,您应该假设设置将相互覆盖。如果行为不同,将在相关文档部分中注明。

所以默认情况下,Vagrant 会创建额外的网络接口,并且不会替换来自 Vagrantfile 的那个。

【讨论】:

  • 你是对的,那里确实有一个硬编码的IP。有没有办法在不重新包装盒子的情况下覆盖它?这些盒子由另一个团队维护,会更方便。
  • 您可以覆盖 box 文件夹中的 Vagrantfile,它会在您的本地更改,这没有问题 - 将使用该 box 的其他人不会受到您本地更改的影响;但默认情况下所有都将在 50.50 IP 上运行
  • 对不起,我的意思是,如果我想与我的团队分享这个,有没有办法直接在用户 Vagrantfile 中覆盖它,或者我必须重新打包一个没有硬编码 192.168.50.50 行的盒子? (顺便说一句,感谢您帮助解决问题,我会在 SO 允许时奖励赏金)
  • 嗯,我不确定你能做到这一点 - 添加一些文档部分;我今天晚些时候可以尝试,最好是删除盒子 Vagrantfile(或至少这个设置)并重新打包盒子
  • 它仍然不起作用,即使在删除基本 Vagrantfile 中的行之后。我可以看到调试日志中关于 192.168.50.50 的行已经消失(实际上没有出现任何“50.50”字符串),并且出现了我的新 IP,但框仍然显示 192.168.50.50。 Bond0 连接仍然存在,IP 为 192.168.50.50。
猜你喜欢
  • 2015-04-14
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多