防火墙阻止了从docker容器到外部的网络连接

防火墙阻止了从docker容器到外部的网络连接

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

如果我的防火墙启用,则docker实例无法连接到外部

$ docker exec -it nacos /bin/sh // 进入nacos容器中
WARNING:  Docker detected local DNS server on resolv.conf. Using default external servers: [8.8.8.8 8.8.4.4]
nacos@d300c5f17207:/# ping 172.30.18.47 // 尝试ping通mysql的容器的IP,ufw开放了是可以ping通的
nacos@d300c5f17207:/# curl 172.30.18.47:3306 // 尝试访问mysql,不通,导致nacos使用mysql持久化连接不上mysql,他们两个在一个networks下面    
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.

docker-compose-mysql.yml

version: '3'
services:

  mysql:
    image: hub.commchina.net/library/mysql:5.7
    container_name: mysql
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    environment:
      - TZ=Asia/Shanghai
    env_file:
      - "./env/mysql.env"
    restart: always
    networks:
      - vcc-net
    logging:
      options:
        max-size: '10m'
        max-file: '1'

networks:
   vcc-net:
      external: true

docker-compose-nacos.yml

version: "3"
services:

  nacos:
    image: hub.commchina.net/shield/nacos-server:2.0.0
    container_name: nacos
    env_file:
      - ./env/nacos-standlone-mysql.env
    volumes:
      - ./log/nacos/:/home/nacos/logs
      - ./nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8848:8848"
      - "9848:9848"
    restart: always
    networks: 
      - vcc-net

networks:
  vcc-net:
    external: true 

这是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
$ sudo ufw allow from 124.204.33.178 to any port 3306    // 开放3306端口给外部访问

并且没有变化仍然被阻止 .

我怎样才能通过ufw规则允许从容器到外部的所有连接?

1、也许这是由于当前版本,但目前的答案不适用于我的系统(Docker 0.7.2与基础Ubuntu映像) .

The solution is explained here in the official Docker documentation.

对于懒惰的人:

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

这可以确保您将流量转发到Docker的桥接网络(就我目前对这些事情的理解而言…) .小编问题得以解决

2、如上面方式不可行,继续try使用下面这种

这为我修好了:

ufw allow in on docker0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值