我正在使用 Ubuntu 16.04 镜像
我跟随本教程
最后一部分,使网络永久部分在我的场景中不起作用。
此时,如果你重启机器,网桥将与 eth1 分离。因此,还有两件事可以使设置永久生效。
/etc/network/interfaces
像这样更新:auto eth1 iface eth1 inet manual pre-up ifconfig $IFACE up post-down ifconfig $IFACE down
/etc/rc.local
并在(exit 0 之前)添加以下命令:brctl addif docker1 eth1
重启机器后,无法从主机 ping 通 IP。所以我怀疑它rc.local
没有起作用。
我也尝试删除文件-e
中的参数rc.local
,但重启后仍然不起作用。
接下来我尝试解决方案 2
docker-network.sh
在目录中创建文件/etc/init.d
:
#!/bin/sh
sudo ip addr del 192.168.33.10/24 dev eth1
sudo brctl addif docker1 eth1
使其可执行:
sudo chmod +x /etc/init.d/docker-network.sh
为我的脚本创建适用于各种运行级别的符号链接:
sudo update-rc.d docker-network.sh defaults
在我重启虚拟机后,我仍然无法直接 ping 到该机器。但是,在我通过 SSH 连接到我运行的机器后/etc/init.d/docker-network.sh
,我就可以 ping 到ping
它了。
那么我如何确保它在重启后能够运行?
更新
我运行sudo systemctl enable rc-local.service
并重新启动。然后我运行sudo systemctl status rc-local
vagrant@vagrant:~$ sudo systemctl status rc-local
● rc-local.service - /etc/rc.local Compatibility
Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset:
Drop-In: /lib/systemd/system/rc-local.service.d
└─debian.conf
Active: active (exited) since Mon 2017-08-21 09:27:56 UTC; 10min ago
Process: 1247 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
Tasks: 0
Memory: 0B
CPU: 0
Aug 21 09:27:56 vagrant systemd[1]: Starting /etc/rc.local Compatibility...
Aug 21 09:27:56 vagrant sudo[1259]: root : TTY=unknown ; PWD=/ ; USER=root ;
Aug 21 09:27:56 vagrant sudo[1259]: pam_unix(sudo:session): session opened for u
Aug 21 09:27:56 vagrant sudo[1308]: root : TTY=unknown ; PWD=/ ; USER=root ;
Aug 21 09:27:56 vagrant sudo[1308]: pam_unix(sudo:session): session opened for u
Aug 21 09:27:56 vagrant rc.local[1247]: bridge eth1 does not exist!
Aug 21 09:27:56 vagrant systemd[1]: Started /etc/rc.local Compatibility.
答案1
systemd
Ubuntu从 Ubuntu 15.04 测试版开始就已开始使用,并且rc.local
在 16.04 中默认处于“关闭”状态。
您可以rc.local
通过以下命令启用并重新启动 Ubuntu。
sudo systemctl enable rc-local.service
您想通过以下命令检查活动状态:
sudo systemctl status rc-local
根据上面命令结果打印的行:
8 月 21 日 09:27:56 vagrant rc.local[1247]: 网桥 eth1 不存在
这意味着rc.local
触发了你的脚本并且它被执行了但有时rc.locsl
执行启动时首先并且它会导致在执行中的命令/脚本时发生一些中断rc.local
。
我建议sleep x
在您的命令/脚本运行之前放置一个rc.local
(x
可以指定秒数的值,您可能需要增加这个x
秒数来查看它何时起作用),您也可以sleep x
在执行主命令之前在您的脚本中执行此操作。