报错信息
[root@Dream soft]# docker run -it -d -p 8080:8080 tomcat
eec9fab6b9ca06d2bbf1467aef05d8020ee60448978e10ac20c38888934f0a0b
docker: Error response from daemon: driver failed programming external connectivity on endpoint hungry_euclid (163242f0079e7260acb3a98ceef930b9629ed0e79407193adf080fdf080fe0ad): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8080 -j DNAT --to-destination 172.17.0.2:8080 ! -i docker0: iptables: No chain/target/match by that name.(exit status 1)).
错误信息显示Docker在设置容器的端口转发时出现了问题。它尝试使用iptables命令来设置NAT规则,但似乎遇到了一些错误。
这个问题可能是由于iptables软件包没有正确安装或配置导致的。你可以尝试重新安装iptables软件包来解决问题。在CentOS系统上,可以使用以下命令重新安装iptables:
sudo yum reinstall iptables
完成后,尝试再次运行Docker容器,并检查是否仍然出现相同的错误。
另外,请确保你确实没有其他服务或进程使用了端口8080,以免发生冲突。你可以使用lsof
命令来检查该端口是否被占用:
sudo lsof -i :8080
如果该端口已被占用,你可以选择更换一个未被占用的端口来运行容器,或者停止占用该端口的进程。
然后重启容器,如果还是启动失败,那么这个时候就是我们的防火墙曾经重启过,导致docker的安全机制发生改变,我们只需要进行重启docker,但是注意,docker重启也会给其他容器带来分险