AWS ECS Fargate 和端口映射

aed*_*tor 15 amazon-web-services amazon-ecs aws-fargate

我有两个容器,它们暴露同一个端口。我想在相同的任务中运行它们,因为它们是同一系统的一部分。但是我无法使用 Fargate 执行此操作,因为没有端口映射,并且主机端口应与 awsvpc 网络模式的容器端口相同(仅 Fargate 支持)。

这是 Docker 的一个基本特性,奇怪的是 Fargate 似乎不支持它。真的没有办法做到这一点还是我错过了什么?

Sun*_*kya 10

将应用程序负载均衡器用于您的服务并在目标组中设置自定义端口,主机端口应设置为与容器端口相同。这是我们经过测试的解决方案。

  • 我有不同的容器使用相同的端口。我想在一个系统中启动它们,因为它们会相互交互并且不能单独存在。我不需要负载均衡器,因为我只需要每个容器的一个实例。 (3认同)

Nic*_* K9 5

解决此问题的最简单方法是使 Docker 容器的端口可配置,然后将其作为环境变量传递给容器。例子:

Dockerfile

FROM python:3.10-slim-bullseye
ENV PORT 5000

# Do all your container setup
# ...

EXPOSE $PORT
ENTRYPOINT path/to/entrypoint.sh
Run Code Online (Sandbox Code Playgroud)

在 中entrypoint.sh,您需要将应用程序本身设置为使用环境变量中提供的端口PORT

然后在任务定义中,将端口映射设置为每个容器的不同端口,并将该端口作为环境变量提供:

{
// ...
      "portMappings": [
        {
          "hostPort": 5001,
          "protocol": "tcp",
          "containerPort": 5001
        }
      ],
// ...
      "environment": [
        {
          "name": "PORT",
          "value": "5001"
        },
      ]
}
Run Code Online (Sandbox Code Playgroud)

如果您不通过环境变量覆盖端口,它将使用 Dockerfile 中声明的默认端口(在本例中为 5000)。