当前位置: 首页 > 知识库问答 >
问题:

Docker-没有到主机的路径

宇文元明
2023-03-14

当我尝试从我的容器内连接到另一个容器的端口时,我不成功并得到,

root@ac1590a59fe5:/opt/f5massupgrade# curl -v https://172.17.0.1:6379
* Rebuilt URL to: https://172.17.0.1:6379/
* Hostname was NOT found in DNS cache
*   Trying 172.17.0.1...
* connect to 172.17.0.1 port 6379 failed: No route to host
* Failed to connect to 172.17.0.1 port 6379: No route to host
* Closing connection 0

从docker主持人那里我成功了,

[root@docker-host ~]# curl -v https://172.17.0.1:6379/0
* About to connect() to 172.17.0.1 port 6379 (#0)
*   Trying 172.17.0.1...
* Connected to 172.17.0.1 (172.17.0.1) port 6379 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none

如果我检查iptables,我可以看到问题,

[root@docker-host ~]#  iptables -S INPUT
-P INPUT ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i docker0 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

所以我添加了以下内容,一切都很好,

iptables -I INPUT 4 -i docker0 -j ACCEPT

我错过什么了吗?

[root@docker-host ~]# docker version
Client:
 Version:         1.9.1
 API version:     1.21
 Package version: docker-common-1.9.1-40.el7.centos.x86_64
 Go version:      go1.4.2
 Git commit:      ab77bde/1.9.1
 Built:
 OS/Arch:         linux/amd64

Server:
 Version:         1.9.1
 API version:     1.21
 Package version: docker-common-1.9.1-40.el7.centos.x86_64
 Go version:      go1.4.2
 Git commit:      ab77bde/1.9.1
 Built:
 OS/Arch:         linux/amd64

谢谢

共有3个答案

申屠新觉
2023-03-14

这些在Fedora 32上对我有效

$ sudo firewall-cmd --zone=public --add-masquerade --permanent
$ sudo firewall-cmd --reload
$ sudo systemctl restart docker
解柏
2023-03-14

如果有人在CentOS 8或任何使用firewalld的系统上仍然遇到此问题

请尝试firewalld的以下设置

# Allows container to container communication, the solution to the problem
firewall-cmd --zone=public --add-masquerade --permanent

# standard http & https stuff
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
# + any other port you may need

# reload the firewall
firewall-cmd --reload

如果docker服务不能立即工作,您可能还需要重新启动它,没有必要将docker0接口添加到受信任区域,因为我已经阅读了许多指南

我在为docker容器设置Traefik反向代理时遇到了困难,我只收到了502个响应,从Traefik日志到我的容器没有路由错误。起初我以为这是我的Traefik设置,但后来发现是@al.提到的防火墙限制。它为我指明了正确的方向,我从中得到了答案https://serverfault.com/questions/987686/no-network-connectivity-to-from-docker-ce-container-on-centos-8

澹台承载
2023-03-14

我们在运行fire walld的RHEL框上遇到了这个问题。防火墙阻止容器托管访问(icmp流量除外)。

我们需要配置防火墙,以允许从docker容器到主机的流量。在我们的案例中,集装箱位于子网172.27.0.0/16(通过docker network lsdocker inspect确定)上的网桥网络中

firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=172.27.0.0/16 accept'
firewall-cmd --reload

这是解决问题的有用参考。

 类似资料:
  • 我已经部署了一个运行在OpenShift Origin上的grpc服务。这是由OpenShift服务支持的。该服务通过OpenShift路由公开。我正在尝试通过一个服务和路线将集装箱港口(50051)映射到8080港的外部世界,从而使这个吊舱可用。 服务试图公开的映像在其Dockerfile中具有: 路线如下: 服务端口:8080/TCP 目标端口:50051 在DeploymentConfig中

  • 在compute节点上启动的VM实例可以访问除C类IP之外的所有外部internet站点。控制器和计算节点已经根据openstack liberty指南在Ubuntu上成功安装。 VM的接口有: [root@vm3~]#ifconfig eth1链路Encap:Ethernet HWaddr FA:16:3E:57:1B:57 inet Addr:192.168.0.215 BCAST:255.2

  • 我正尝试在“Docker quickstart Terminal”中使用命令下载centos映像 结果 我使用 Docker 1.9.1版本,构建a34a1d5 这看起来像是“Docker quickstart Terminal”中可见的DNS出现了问题

  • 有人知道怎么解决这个问题吗?

  • 我尝试使用 JMeter 运行分布式测试,我有 2 个 EC2 实例 主公共 IP: 54.xxx.xx.xx 从属公共 IP: 204.xxx.xxx.xxx 我已经打开了配置中使用的所有必要端口。 我可以从另一个 EC2 对每个 EC2 执行 ping 操作,并且 ping 成功。 但当我尝试启动测试时,服务器失败并返回[No route to host(host unreachable)]。

  • 除了使用环境变量之外,还有哪些方法可以从运行在该主机上的容器内部获取docker主机的主机名?我知道我可以在容器创建时将主机名作为环境变量传递给容器。我想知道如何在运行时查找它。 在docker主机中运行的容器是否有方法获得“foo.example.com”? 编辑以添加用例: 容器将为表单的服务发现创建一个SRV记录 其中20003是docker主机上动态分配的端口,用于侦听bar中某个固定端口