docker: Error response from daemon: driver failed programming external connectivity on endpoint tomc

这篇具有很好参考价值的文章主要介绍了docker: Error response from daemon: driver failed programming external connectivity on endpoint tomc。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

docker: Error response from daemon: driver failed programming external connectivity on endpoint tomcat1 (9d06342addfe339a1bbf0876ae4534410f58cc65fa0b3b6516f282224af68202): (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)).

1.错误重现

  • 服务器环境:CentOS7.9
  • 进行实验:Docker启动Tomcat容器,端口出现问题

1.1 错误场景

当我在使用 docker 运行 tomcat 容器的时候,爆出了如下的错误

docker: Error response from daemon: driver failed programming external connectivity 
on endpoint tomcat1 (9d06342addfe339a1bbf0876ae4534410f58cc65fa0b3b6516f282224af68202)
:  (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: Error response from daemon: driver failed programming external connectivity on endpoint tomc

仔细一看,应该是有关 iptables 的规则问题,然后 8080端口出现了 destination 即定义出口的问题,然后不满足 iptables规则问题,而 iptables 是 firewalld防火墙的内部实现方式,属于更底层的防火墙规则

1.2 检查排错过程

  • 首先检查一下是否存在端口占用
[root@d ~]# netstat -tunlp | grep 8080

发现并没有端口占用 8080,说明不是端口占用的问题,然后需要排查 防火墙问题

[root@d ~]# firewall-cmd --list-all --zone=trusted
trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: ens33
  sources:
  services:
  ports: 8080/tcp 80/tcp 6379/tcp 4369/tcp 25672/tcp 15672/tcp 5672/tcp 8100/tcp 5673/tcp 2184/tcp 2185/tcp 2186/tcp 9092/tcp 9093/tcp 9094/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

docker: Error response from daemon: driver failed programming external connectivity on endpoint tomc

防火墙也确实是放行了 8080 端口,防火墙也应该没有问题,但是报错显示 iptables 的防火墙规则,因为 firewalld 是 iptables 的上层应用,所以我们重启一下 firewalld,进行测试

[root@d ~]# systemctl start firewalld.service

还需要重启一下 docker,因为这是与 docker 相关的 iptables 规则,我们要重新启动,生成新的规则

[root@d ~]# systemctl restart docker

然后再次创建 tomcat 容器

[root@d ~]# docker run -id --name tomcat1 -p 8080:8080 tomcat:7-jre7 /bin/bash
a874d7e2fb26c3e8f8b8ab09eb9f2823d7d4a0151eea12665675312bdf0fe411

[root@d ~]# docker ps | grep tomcat1
a874d7e2fb26   tomcat:7-jre7                      "/bin/bash"              24 minutes ago   Up 24 minutes                     0.0.0.0:8080->8080/tcp, :::8080->8080/tcp                       tomcat1

此时说明 tomcat 容器创建成功,没有爆出对应的错误
docker: Error response from daemon: driver failed programming external connectivity on endpoint tomc文章来源地址https://www.toymoban.com/news/detail-435070.html

到了这里,关于docker: Error response from daemon: driver failed programming external connectivity on endpoint tomc的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包