在8代的小主机上安装CentOS,原本还是想安装7.2的,结果发现默认的驱动无法让网卡以及无线网卡正常工作,没有网络的话就玩不下去了。尝试换了7.3和7.4都不行,只有7.9才能正常。没办法只好安装7.9版了。
参照之前的一些折腾记录,发现安装了最新版本的docker无法安装portainer和hass,排查之后发现portainer无法安装竟然是跟DNS有关,以前确实没有遇到。因为小主机是放在家里的,用的内网,习惯性的将DNS设置成了家里的路由器IP地址。发现问题之后,就修改网络配置,将DNS改成了8.8.8.8,再重新安装portainer就成功了。
然后安装hass,也是无法安装成功,但是出现的问题不一样。排查发现是因为运行命令中多写了一个参数-p,这个参数在命令语句中重复了。
原命令语句是:
docker run -d --name="hass" -v /home/hass/config:/config -p -p 8123:8123 homeassistant/home-assistant:latest
修改之后:
docker run -d --name="hass" -v /home/hass/config:/config -p 8123:8123 homeassistant/home-assistant:latest
然后就安装成功了。安装好了,但是无法访问。
用docker ps命令查看,发现没有任何容器运行。纳泥?明明都有两个容器成功安装了,竟然没有运行?
再用docker ps命令,加上-a参数查看所有容器,终于看到了安装成功的两个容器,但是这两个容器并没有运行。
用docker start hass命令运行hass容器,报错:
Error response from daemon: driver failed programming external connectivity on endpoint hass (2ab618bc45d9f884ad630fe63f0b8d9d15377f47e3a0ae98bfe4e033e0e448d7): (iptables failed: iptables --wait -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.17.0.2 --dport 8123 -j ACCEPT: iptables: No chain/target/match by that name.
(exit status 1))
通过度娘查了一下原因:
原因:在我们启动了Docker后,我们再对防火墙firewalld进行操作,就会发生上述报错,
详细原因:docker服务启动时定义的自定义链DOCKER,当 centos7 firewall 被清掉时,
firewall的底层是使用iptables进行数据过滤,建立在iptables之上,这可能会与 Docker 产生冲突。
当 firewalld 启动或者重启的时候,将会从 iptables 中移除 DOCKER 的规则,从而影响了 Docker 的正常工作。
当你使用的是 Systemd 的时候, firewalld 会在 Docker 之前启动,但是如果你在 Docker 启动之后操作 firewalld ,你就需要重启 Docker 进程了。
解决方法是重启docker:
systemctl restart docker
重启成功,再次运行启动容器命令:
docker start hass
hass容器成功运行,跟着portainer也同样成功运行。