aed*_*tor 15 amazon-web-services amazon-ecs aws-fargate
我有两个容器,它们暴露同一个端口。我想在相同的任务中运行它们,因为它们是同一系统的一部分。但是我无法使用 Fargate 执行此操作,因为没有端口映射,并且主机端口应与 awsvpc 网络模式的容器端口相同(仅 Fargate 支持)。
这是 Docker 的一个基本特性,奇怪的是 Fargate 似乎不支持它。真的没有办法做到这一点还是我错过了什么?
Sun*_*kya 10
将应用程序负载均衡器用于您的服务并在目标组中设置自定义端口,主机端口应设置为与容器端口相同。这是我们经过测试的解决方案。
解决此问题的最简单方法是使 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)。
| 归档时间: |
|
| 查看次数: |
11345 次 |
| 最近记录: |