1. 配置防火墙规则firewall-cmd --zone=public --add-port={port}/tcp --permanent,并重载防火墙规则firewall-cmd --reload 2. 启动容器时使用--net host模式 3. 关闭防火墙
_Supplement: コンテナーで要求されたソース アドレスは、使用されている docker0 ネットワーク セグメントの内部ネットワーク アドレスであるため、ホスト ファイアウォールは、ホスト ネットワークではない docker0 ネットワーク セグメントの内部ネットワーク アドレスに対する要求を識別できません。セグメント化してマークします。ソースが不明なため、リクエストはインターセプトされます。これは、ファイアウォール ソース ルール (Docker コンテナのデフォルトのイントラネット セグメントは 172.17.0.0/16) を追加することで解決できます:
<rule family="ipv4"> <source address="172.17.0.0/16" /> <accept /></rule>
同一宿主机微服务之间通信异常的血案: 微服务A能够正常请求AR 微服务B能够正常请求BR 但是微服务A某请求OR,内部访问BR,始终无法调用成功 原因: centos的firewalld为开启状态时,微服务A内部发起请求时,请求无法从容器发出,即出现了调用不成功的情况(No route to host) 矛盾点: spring cloud config 启动缓慢导致在测试的时候config服务启动后的一段时间内无法访问,让我们误以为关闭firewalld后无法接收请求,但又和其他服务又能正常访问出现了矛盾 验证: docker创建四个nginx(8120、8787、8083、8084)容器,并创建ubuntu容器安装curl。 开启iptables,关闭firewalld,重启docker,启动五个容器,外部四个nginx访问成功,进入ubuntu容器使用curl访问,均成功 开启iptables,开启firewalld,重启docker,启动五个容器,外部四个nginx访问成功,进入ubuntu容器使用curl访问,均不成功 开启iptables,开启firewalld,重启docker,启动五个容器,外部四个nginx访问成功,宿主机配置firewall-cmd --zone=public --add-port=8120/tcp --permanent,进入ubuntu容器使用curl访问,8120访问,其他均不成功 宿主机配置端口使用iptables转发规则配置无效: iptables -A INPUT -p tcp --dport 8120 -j ACCEPT iptables -A OUTPUT -p tcp --dport 8120 -j ACCEPT iptables -A FORWARD -p tcp --dport 8120 -j ACCEPT 结论: 无论firewalld开启还是关闭,均不影响外部访问,宿主机需配置firewall-cmd --zone=public --add-port=8120/tcp --permanent(删除端口去掉--zone=public)同一宿主机才能相互访问成功 生产解决方案: 开启iptables,关闭firewalld 开启iptables,开启firewalld并配置开放端口 (开启或关闭firewalld后,需要重启docker) iptables->ufw(ubuntu)iptables->firewalld(centos)
以上がdockerが内部のホストにアクセスできない問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。