当前位置: 首页 > 面试题库 >

我的防火墙阻止了从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规则轻松地允许从容器到外部的所有连接?


问题答案:

也许这是由于当前版本引起的,但是当前答案在我的html" target="_blank">系统上不起作用(带有基本Ubuntu映像的Docker 0.7.2)。

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

对于懒惰的人:

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

这可以确保ufw将您的流量转发到Docker的桥接网络(根据我目前对这些事情的了解…)。



 类似资料:
  • 对我来说,这是一个非常标准的设置,我有一台运行docker和ufw的ubuntu机器作为我的防火墙。 如果我的防火墙处于启用状态,则 Docker 实例无法连接到外部 下面是 ufw 日志,显示来自 docker 容器的已阻止连接。 我尝试使用ip添加规则。 而且毫无变化依然受阻。 如何使用 ufw 规则允许从容器到外部的所有连接?

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

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

  • 我在docker容器中的服务器上有Postgresql。如何从外部连接到它,即从本地计算机连接到它?我应该应用什么设置来允许它?

  • 问题内容: 我创建了我的第一个Docker容器,它使用Go运行服务器,但是无法从主机外部访问它。我刚开始使用docker,所以在这里有点迷路了。 因此,我有一个非常简单的Go代码来启动服务器,我构建了Docker映像,该映像安装了Go并在Linux基本映像中构建了代码。我在端口8080上运行服务器,因此我将该端口暴露给运行容器的主机,如下所示: 那行得通, 我可以通过docker的机器IP ( 启

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