我正在容器中运行一个基于tomcat的应用程序,在我的ubuntu主机上运行一个Postgres数据库容器。他们都在我定义的码头桥网络里。我的防火墙启用了。我的防火墙对5432端口没有任何拒绝规则。禁用防火墙时,tomcat应用程序可以使用其IP或服务名称连接到数据库容器。但是,当启用防火墙时,它不会连接到数据库容器。我在DOCKER_OPTS=中设置了docker.conf“-iptables=false”,并重新启动了docker。当启用防火墙时,为什么不连接?
1)以下是我的现行规则:
的行动
2377/tcp允许在任何地方
7946/tcp允许在任何地方
7946/udp允许任何地方
4789/udp允许任何地方
22允许在任何地方
8443允许10.20.220.185
8443允许10.20.220.78
8081允许10.5.0.7
5432允许在任何地方
8081允许10.5.0.5
2377/tcp (v6)允许任何地方(v6)
7946/tcp (v6)允许任何地方(v6)
7946/udp (v6)允许任何地方(v6)
4789/udp (v6)允许任何地方(v6)
22 (v6)允许任何地方(v6)
5432 (v6)允许任何地方(v6)
=========================================================================
2)这是我使用服务名称连接到数据库的应用程序配置:- driverClass=org.postgresql.Driver jdbcUrl=jdbc:postgresql://PostgresDatabase:5432/dockerdb user=dockeruser
发布于 2018-09-11 09:14:47
设置--iptables=false
意味着停靠守护进程无法在主机上配置iptables规则。然而,当你启用ufw的时候,它是非常重要的。
我确信,在您删除配置中的DOCKER_OPTS="--iptables=false"
并重新启动daemon后,此问题将消失。
在启动过程中,daemon将配置一些额外的iptable规则,以使容器之间/容器与外部世界之间的通信良好,因为防火墙/ufw将通过DEFAULT_FORWARD_POLICY
丢弃数据包。
下面是docker创建iptable规则的一个粗略过程:
iptables -I POSTROUTING -t nat -s 172.17.0.1 ! -o docker0 -j MASQUERADE
iptables -I FORWARD -i docker0 -o docker0 -j ACCEPT
iptables -I FORWARD -i docker0 ! -o docker0 -j ACCEPT
iptables -I FORWARD -o docker0 -m conntrack -ctstate RELATED,ESTABLISHED -j ACCEPT
。最重要的是,您启用了iptables
设置为false,启用了防火墙,而没有任何额外的操作。就像你把钥匙扔在门锁上,但你还是想出去。因此,我强烈建议您在完全了解码头网络体系结构和这些组件是如何协同工作之前,不要更改任何对接器网络设置。
这是另一个问题以另一种方式提出的问题。愿答案对你有更多的帮助。
https://stackoverflow.com/questions/52255594
复制相似问题