我有一个非常简单的 Django Rest Framework (DRF) 应用程序,该应用程序经过 Docker 化并使用 Fargate 部署在 AWS ECS 上。我创建了一个安全组,在入站规则上公开端口 8000,并且能够在公共 IP 上看到该应用程序
12.34.56:78:8000/
我想让应用程序在端口 80 上运行,但不知道如何操作。我是否需要在 Dockerfile 上公开 80 并在创建任务定义时指定该端口?或者我需要设置 nginx 在内部将 HTTP 请求传递到端口 8000 吗?
Dockerfile:
# Pull base image
FROM python:3.12
# Set environment variables
ENV PIP_DISABLE_PIP_VERSION_CHECK 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Set work directory
WORKDIR /app
# Install dependencies
COPY ./requirements.txt .
RUN pip install -r requirements.txt
# Copy project
COPY . .
# Expose the Django development server port
EXPOSE 8000
# # Start the Django development server
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
任务定义:
{
"taskDefinitionArn": "arn:aws:ecs:us-west-1:123:task-definition/app-task:12",
"containerDefinitions": [
{
"name": "container-name",
"image": "dockerhub/app:latest",
"cpu": 0,
"portMappings": [
{
"name": "default",
"containerPort": 8000,
"hostPort": 8000,
"protocol": "tcp",
"appProtocol": "http"
}
],
"essential": true,
"environment": [],
"mountPoints": [],
"volumesFrom": [],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-create-group": "true",
"awslogs-group": "/ecs/app-api-task",
"awslogs-region": "us-west-1",
"awslogs-stream-prefix": "ecs"
}
}
}
],
....
}