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

限制Internet访问-Docker容器

裴存
2023-03-14

我的情况是限制负载均衡器网络中容器的internet访问。例如,在下面的图片中

只有容器4连接到Internet;其他三个只通过容器4与外界通信。例如,如果容器1需要smtp支持,它会将smtp请求转发给容器4以获得访问权限。

除container4外,任何容器都不允许直接访问互联网!这应该在Docker级别强制执行。

我相信它将在docker network creation上进行配置,有人能解释一下如何实现这一点吗?

共有3个答案

仉刚洁
2023-03-14

另一种选择是,如果您需要在没有internet访问的情况下公开容器上的端口,但希望让它与其他容器通信,则可以提供虚假的DNS配置。不过,这并不是一个完美的解决方案,因为它不会阻止对外部世界的直接IP访问。

docker撰写。亚马尔

version: '3'

services:
  service1:
    image: alpine
    command: sh -c 'ping service2 -c 1; ping google.com -c 1'
    dns: 0.0.0.0
  service2:
    image: alpine
    command: sh -c 'ping service1 -c 1; ping google.com -c 1'
    dns: 0.0.0.0
isolated> docker-compose up
Recreating isolated_service1_1 ... done                                                                                 Recreating isolated_service2_1 ... done                                                                                 Attaching to isolated_service2_1, isolated_service1_1
service1_1  | PING service2 (172.18.0.2) 56(84) bytes of data.
service1_1  | 64 bytes from isolated_service2_1.isolated_default (172.18.0.2): icmp_seq=1 ttl=64 time=0.038 ms
service1_1  |
service1_1  | --- service2 ping statistics ---
service1_1  | 1 packets transmitted, 1 received, 0% packet loss, time 0ms
service1_1  | rtt min/avg/max/mdev = 0.038/0.038/0.038/0.000 ms
service2_1  | PING service1 (172.18.0.3) 56(84) bytes of data.
service2_1  | 64 bytes from isolated_service1_1.isolated_default (172.18.0.3): icmp_seq=1 ttl=64 time=0.093 ms
service2_1  |
service2_1  | --- service1 ping statistics ---
service2_1  | 1 packets transmitted, 1 received, 0% packet loss, time 0ms
service2_1  | rtt min/avg/max/mdev = 0.093/0.093/0.093/0.000 ms
service1_1  | ping: google.com: Temporary failure in name resolution
service2_1  | ping: google.com: Temporary failure in name resolution
isolated_service1_1 exited with code 2
isolated_service2_1 exited with code 2
淳于昊然
2023-03-14

接入internet的网络创建

docker网络创建——子网=172.19.0.0/16互联网

为阻止互联网访问创建网络

Docker网络创建-内部-子网10.1.1.0/24无互联网

如果您想将docker容器连接到Internet

docker network connect internet container-name

如果你想阻止互联网访问

docker network connect no-internet container-name

在内部网络中,我们不能公开端口来连接外部世界,请参阅此问题以了解更多详细信息

柴琦
2023-03-14

正如我在这里发现的,我得到这个是为了与docker compose合作。另存为docker compose。yml

version: '3'

services:
  outgoing-wont-work:
    image: alpine
    networks:
      - no-internet
    command: ping -c 3 google.com # will crash

  internal-will-work:
    image: alpine
    networks:
      - no-internet
    command: ping -c 3 internal-and-external

  internal-and-external:
    image: alpine
    networks:
      - no-internet
      - internet
    command: ping -c 3 google.com

networks:
  no-internet:
    driver: bridge
    internal: true
  internet:
    driver: bridge

然后运行docker compose up-ddocker compose ps几秒钟后会显示如下内容:

              Name                            Command               State    Ports
----------------------------------------------------------------------------------
dco_inet_internal-and-external_1   ping -c 3 google.com             Exit 0        
dco_inet_internal-will-work_1      ping -c 3 internal-and-ext ...   Exit 0        
dco_inet_outgoing-wont-work_1      ping -c 3 google.com             Exit 1      
 类似资料:
  • 在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。 但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性: >>> bart = Student('Bart Simpson', 98) >>> bart.score 98 >>> bart.score = 59 >>> bart.sc

  • 在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。 但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性: >>> bart = Student('Bart Simpson', 59) >>> bart.score 59 >>> bart.score = 99 >>> bart.sc

  • 问题内容: 我正在编写Java应用程序,目前正在处理所有Apple本机LAF内容。我试图自定义应用程序菜单,但发现需要使用com.apple.eawt.Application来进行此操作。但是,当我尝试导入该类时,我的IDE会说: 我正在 Mac OS X 10.9上* 使用 Eclipse 使用 JDK 1.7 更新45 。该 rt.jar的 是在类路径中,但事情很不高兴。我该如何解决? * 问

  • 问题内容: 我是Docker的新手,所以很可能我缺少一些东西。 我正在使用Elasticsearch使用此图像运行容器。 我能够正确设置所有内容。之后,我使用的是一个由同事开发的脚本,用于插入一些数据,基本上是查询MySQL数据库并发出HTTP请求。 问题是,这些请求中的许多请求都会卡住,直到失败。如果我知道了: 有很多要求。在这一点上,我不确定这是否与elasticsearch或泊坞窗有关。如果

  • 问题内容: 带有 Windows的Docker桌面的Docker Windows容器是否具有默认内存限制?我有一个在容器中运行时崩溃的应用程序,但是当我尝试为命令指定参数时,它似乎运行良好。至少在以前崩溃的情况下。这给我的印象是有默认的内存限制,但是我在文档中找不到它。所以我的问题是是否存在内存限制,并且是否在记录的地方? 问题答案: 根据关于Windows的Docker Github问题的讨论(

  • 容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables 防火墙来进行管理和实现。iptables 是 Linux 上默认的防火墙软件,在大部分发行版中都自带。 容器访问外部网络 容器要想访问外部网络,需要本地系统的转发支持。在Linux 系统中,检查转发是否打开。 $sysctl net.ipv4.ip_forwardnet.ipv4.ip_forward = 1 如果为 0,