Docker compose for AWS EC2 instance with ports limited to private IP address not working

问题描述 投票:0回答:1

我有一个 EC2 实例,带有公共(弹性)和私有 IP 地址。我想运行一个端口绑定 only 到私有 IP 地址的 docker 容器。

我的 docker-compose.yml 看起来像这样:

version: '3.8'

services:
  app:
    network_mode: host
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    container_name: npm
    ports:
      - "10.10.100.100:81:81" # internal IP address

我的外部 IP 地址 (elasticIP) 类似于 3.29.50.100。 我认为上述

10.10.100.100:81:81
会限制进入我的实例的流量,只允许来自 10.10.100.100 IP 地址的流量,并拒绝所有其他流量。我添加了
network_mode: host
认为可以解决问题。

但是,我仍然可以从 elasticIP 地址(例如“http://3.29.50.100:81”和主机上的任何其他地址,例如“http://127.0.0.1:81”)访问我的容器服务.

Docker 文档似乎表明上述内容应该有效。

我做错了什么?

amazon-web-services docker amazon-ec2 docker-compose amazon-vpc
1个回答
1
投票

IP 绑定实际上做的是绑定到具有该 IP 地址的网络接口。然而,您的 EC2 实例实际上只有一个网络接口。 AWS 网络正在执行 NAT 以将流量从公共 IP 发送到私有 IP,因此所有流量仍会到达该单个网络接口。

要通过 docker-compose 做你想做的事,你首先必须为 EC2 实例分配第二个弹性网络接口,而没有为该 ENI 分配公共 IP,然后绑定到它。


但是,在 AWS 中有一种更简单的方法来处理这类事情。您可以简单地更新 EC2 实例的安全组,以便端口

81
的唯一入站规则指定您的 VPC 的 CIDR 块。然后只有源自您的 VPC 的请求才能访问 EC2 服务器上的端口
81
。来自 VPC 外部的任何请求都将被阻止访问该端口。

© www.soinside.com 2019 - 2024. All rights reserved.