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

我的防火墙阻止了docker容器与外界的网络连接

暴绪
2023-03-14

对我来说,这是一个非常标准的设置,我有一台运行docker和ufw的ubuntu机器作为我的防火墙。

如果我的防火墙处于启用状态,则 Docker 实例无法连接到外部

$ docker run -i -t ubuntu /bin/bash
WARNING:  Docker detected local DNS server on resolv.conf. Using default external servers: [8.8.8.8 8.8.4.4]
root@d300c5f17207:/# apt-get update
Err http://archive.ubuntu.com precise InRelease
0% [Connecting to archive.ubuntu.com]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/precise/InRelease  
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/precise/Release.gpg  Temporary failure resolving 'archive.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.

下面是 ufw 日志,显示来自 docker 容器的已阻止连接。

$ sudo tail /var/log/ufw.log
Jun 30 15:41:56 localhost kernel: [61609.503199] [UFW BLOCK] IN=testbr0 OUT=eth0 PHYSIN=veth8Rj8Nh MAC=fe:ff:ed:42:b0:01:0a:7c:42:7c:a6:72:08:00 SRC=172.16.42.2 DST=8.8.8.8 LEN=64 TOS=0x00 PREC=0x00 TTL=63 ID=14886 DF PROTO=UDP SPT=60192 DPT=53 LEN=44 
Jun 30 15:42:01 localhost kernel: [61614.500867] [UFW BLOCK] IN=testbr0 OUT=eth0 PHYSIN=veth8Rj8Nh MAC=fe:ff:ed:42:b0:01:0a:7c:42:7c:a6:72:08:00 SRC=172.16.42.2 DST=8.8.4.4 LEN=64 TOS=0x00 PREC=0x00 TTL=63 ID=16137 DF PROTO=UDP SPT=44812 DPT=53 LEN=44 
Jun 30 15:42:06 localhost kernel: [61619.498516] [UFW BLOCK] IN=testbr0 OUT=eth0 PHYSIN=veth8Rj8Nh MAC=fe:ff:ed:42:b0:01:0a:7c:42:7c:a6:72:08:00 SRC=172.16.42.2 DST=8.8.8.8 LEN=64 TOS=0x00 PREC=0x00 TTL=63 ID=14887 DF PROTO=UDP SPT=60192 DPT=53 LEN=44

我尝试使用ip添加规则。

$ sudo ufw allow in from 172.16.42.2
$ sudo ufw allow out from 172.16.42.2

而且毫无变化依然受阻。

如何使用 ufw 规则允许从容器到外部的所有连接?

共有3个答案

解河
2023-03-14

可能这是因为现在的版本,但是现在的回答在我的系统上是不行的(Docker 0.7.2带base Ubuntu镜像)。

该解决方案在官方 Docker 文档中进行了说明。

对于懒惰的人:

  • 编辑/etc/default/ufw以将DEFAULT_FORWARD_POLICY的值更改为"ACCEPT"
  • 使用[sudo]ufw reload重新加载。

这确保了ufw将你的流量转发到Docker的桥接网络(根据我目前对这些事情的理解...).

仲孙小云
2023-03-14

编辑< code >/etc/ufw/before . rules 如下:

在*过滤器部分,在所需行的第一个块之后添加:

# docker rules to enable external network access from the container
# forward traffic accross the bridge 
-A ufw-before-forward -i docker0 -j ACCEPT
-A ufw-before-forward -i testbr0 -j ACCEPT
-A ufw-before-forward -m state --state RELATED,ESTABLISHED -j ACCEPT

在文件末尾,在显示 COMMIT 的行之后,添加以下部分:

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.16.42.0/8 -o eth0 -j MASQUERADE
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

保存文件后,重新启动 ufw 并禁用 sudo ufw

濮阳繁
2023-03-14

这为我修复了它:

 ufw allow in on docker0
 类似资料:
  • 问题内容: 对我来说,这是一个非常标准的设置,我有一台运行docker和ufw的ubuntu计算机作为我的防火墙。 如果启用了防火墙,则Docker实例将无法连接到外部 这是ufw日志,显示了来自Docker容器的被阻止的连接。 我尝试使用ip添加规则。 并且没有变化仍然被阻止。 如何通过ufw规则轻松地允许从容器到外部的所有连接? 问题答案: 也许这是由于当前版本引起的,但是当前答案在我的系统上

  • 我怎样才能禁用Debian的保护来允许外部玩家加入我的服务器?

  • 我在Windows Azure中开发了一个驻留在Windows Server 2012机器上的应用程序。应用程序充当许多并发网络连接的服务器,但流量非常低且稀少(客户机每隔几个小时才发送一次信息,但它们确实需要时刻连接,以便接收服务推送的更新)。 在没有流量的情况下几分钟后,客户机/服务器通信似乎被冻结,客户机和服务器之间没有流量流动。实际上,30-60秒后,客户端尝试发送一些东西,他们显示连接已

  • 问题内容: 我想阻止从外部直接访问docker容器。我使用haproxy,并且只希望访问端口80、443。 我在iptables中添加了以下规则。但是我仍然可以通过不同的端口访问Docker容器。 这可能是由于DOCKER链 我需要创建什么规则来阻止直接访问? 问题答案: 您可以使用命令创建一个网络来连接应用程序和代理,而不必使用IP表来执行此操作。另外,请勿在任何端口上公开应用程序。您应该公开的

  • 基本概念 netfilter Linux 内核包含一个强大的网络过滤子系统 netfilter。netfilter 子系统允许内核模块对遍历系统的每个网络数据包进行检查。这表示在任何传入、传出或转发的网络数据包到达用户空间中的组件之前,都可以通过编程方式检查、修改、丢弃或拒绝。netfilter 是 RHEL 7 计算机上构建防火墙的主要构建块。 尽管系统管理员理论上可以编写自己的内核模块以与 n

  • 我为Azure存储帐户启用了虚拟网络和防火墙访问限制,但遇到了一个问题,即我无法从Azure Functions(ASE环境)访问存储帐户,尽管ASE公共地址是作为例外添加的。此外,我添加了所有环境的虚拟网络,只是为了确保。是否有任何方法可以检查函数/其他服务试图从哪个地址访问存储帐户?此外,我有一个勾选“允许受信任的Microsoft服务访问此存储帐户”。我不确定“受信任的Microsoft服务