英文:
AWS Fargate can't run ENV specific build?
问题
我有一个Next.js应用程序,我正在将其容器化并部署到AWS Fargate中。
以下是我的Docker文件:
# 基础镜像
FROM node:18-alpine
ARG ENV=$ENV
RUN mkdir -p /usr/app/
WORKDIR /usr/app/
COPY . .
RUN ls -l
RUN npm install
RUN npm run build-qa
EXPOSE 3000
CMD ["npm", "start-qa"]
这是我的ECS任务定义:
{
"taskDefinitionArn": "arn:aws:ecs:region:**********:task-definition/NextJs-task:6",
"containerDefinitions": [
{
"name": "NextJs-container",
"image": "**********.dkr.ecr.region.amazonaws.com/next-js-app:latest",
"cpu": 1024,
"portMappings": [
{
"containerPort": 3000,
"hostPort": 3000,
"protocol": "tcp"
}
],
"essential": true,
"environment": [
{
"name": "ENV",
"value": "qa"
}
],
"mountPoints": [],
"volumesFrom": [],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-create-group": "true",
"awslogs-group": "/ecs/NextJs",
"awslogs-region": "region",
"awslogs-stream-prefix": "ecs"
}
}
}
],
"family": "NextJs-task",
"taskRoleArn": "arn:aws:iam::**********:role/ecsTaskExecutionRole",
"executionRoleArn": "arn:aws:iam::**********:role/ecsTaskExecutionRole",
"networkMode": "awsvpc",
"revision": 6,
"volumes": [],
"status": "ACTIVE",
"requiresAttributes": [
{
"name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
},
{
"name": "ecs.capability.execution-role-awslogs"
},
{
"name": "com.amazonaws.ecs.capability.ecr-auth"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
},
{
"name": "com.amazonaws.ecs.capability.task-iam-role"
},
{
"name": "ecs.capability.execution-role-ecr-pull"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
},
{
"name": "ecs.capability.task-eni"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.29"
}
],
"placementConstraints": [],
"compatibilities": [
"EC2",
"FARGATE"
],
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "2048",
"memory": "4096",
"registeredAt": "**************",
"registeredBy": "arn:aws:sts::**********:assumed-role/aws-sre/-------------"
}
在运行任务时,Fargate报错:
要查看支持的npm命令列表,请运行:
npm help
未知命令:"start-qa"
是否是其中一个?
npm start # 启动一个包
npm run start-qa # 运行 "start-qa" 包脚本
npm run start-uat # 运行 "start-uat" 包脚本
我是使用以下命令构建我的Docker镜像的。我在AWS Apprunner中也遇到了类似的问题。
docker build --build-arg ENV=$ENV -t next-js-app .
我从Jenkins作业参数中传递了ENV。
英文:
I had Next-Js application which I was containerizing and deploying it in AWS Fargate.
Below is my dockerfile
#Base Image
FROM node:18-alpine
ARG ENV=$ENV
RUN mkdir -p /usr/app/
WORKDIR /usr/app/
COPY . .
RUN ls -l
RUN npm install
RUN npm run build-qa
EXPOSE 3000
CMD ["npm", "start-qa"]
And here is my ECS Task Defination
{
"taskDefinitionArn": "arn:aws:ecs:region:**********:task-definition/NextJs-task:6",
"containerDefinitions": [
{
"name": "NextJs-container",
"image": "**********.dkr.ecr.region.amazonaws.com/next-js-app:latest",
"cpu": 1024,
"portMappings": [
{
"containerPort": 3000,
"hostPort": 3000,
"protocol": "tcp"
}
],
"essential": true,
"environment": [
{
"name": "ENV",
"value": "qa"
}
],
"mountPoints": [],
"volumesFrom": [],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-create-group": "true",
"awslogs-group": "/ecs/NextJs",
"awslogs-region": "region",
"awslogs-stream-prefix": "ecs"
}
}
}
],
"family": "NextJs-task",
"taskRoleArn": "arn:aws:iam::**********:role/ecsTaskExecutionRole",
"executionRoleArn": "arn:aws:iam::**********:role/ecsTaskExecutionRole",
"networkMode": "awsvpc",
"revision": 6,
"volumes": [],
"status": "ACTIVE",
"requiresAttributes": [
{
"name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
},
{
"name": "ecs.capability.execution-role-awslogs"
},
{
"name": "com.amazonaws.ecs.capability.ecr-auth"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
},
{
"name": "com.amazonaws.ecs.capability.task-iam-role"
},
{
"name": "ecs.capability.execution-role-ecr-pull"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
},
{
"name": "ecs.capability.task-eni"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.29"
}
],
"placementConstraints": [],
"compatibilities": [
"EC2",
"FARGATE"
],
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "2048",
"memory": "4096",
"registeredAt": "**************",
"registeredBy": "arn:aws:sts::**********:assumed-role/aws-sre/-------------",
}
When running a task the fargate was giving error as
To see a list of supported npm commands, run:
npm help
Unknown command: "start-qa"
Did you mean one of these?
npm start # Start a package
npm run start-qa # run the "start-qa" package script
npm run start-uat # run the "start-uat" package script
I was building my docker image with following command. I have faced similar issue is AWS Apprunner too.
docker build --build-arg ENV=$ENV -t next-js-app .
Was passing the ENV from Jenkins job parameter
答案1
得分: 1
这个错误与Fargate、ECS或任何与“ENV特定构建”有关的限制无关。如果你使用相同的Docker镜像在本地运行它,你会看到相同的错误消息。
错误提示你不理解 npm start-qa
是什么,甚至建议你应该改为 npm run start-qa
。
你需要将Dockerfile 中的最后一行更改为这样:
CMD ["npm", "run", "start-qa"]
英文:
This error has nothing to do with Fargate, ECS, or any sort of limitation around "ENV Specific Builds". If you took the same docker image and ran it locally, you would see the same error message.
The error is telling you it doesn't understand what npm start-qa
is, and event suggesting to you that you should be doing npm run start-qa
instead.
You need to change the last line in your Dockerfile to this:
CMD ["npm", "run", "start-qa"]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论