Docker 容器在使用 AWS ECR 的 AWS ECS 中不起作用
Posted
技术标签:
【中文标题】Docker 容器在使用 AWS ECR 的 AWS ECS 中不起作用【英文标题】:Docker Container not working in AWS ECS using AWS ECR 【发布时间】:2020-10-31 07:09:51 【问题描述】:我有一个 docker 容器,并且必须使用 AWS ECR 和 Elastic Beanstalk 在 AWS 云上进行部署。我正在使用Dockerrun.aws.json
文件来提供有关存储库详细信息的信息。我已将我的图像推送到我的 docker hub 和 Elastic Container Registry。
在 ECS 中使用 DockerHub,它可以从 docker hub 拉取 docker 镜像并启动容器而不会出现任何问题并按预期运行应用程序。另一方面,当从同一应用程序的 AWS ECR 存储库中提取映像时,容器会停止。部署失败的原因:Essential container in task exited
Dockerrun.aws.json
"containerDefinitions": [
"essential": true,
"image": "01234567891.dkr.ecr.us-east-1.amazonaws.com/app:1",
"memory": 512,
"name": "web",
"portMappings": [
"containerPort": 5000,
"hostPort": 80
]
],
"family": "",
"volumes": [],
"AWSEBDockerrunVersion": "2"
我登录到实例并尝试获取容器的日志。
但是,我收到了这个错误standard_init_linux.go:211: exec user process caused "exec format error"
Dockerfile
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
【问题讨论】:
你没有详细说明你在做什么,所以几乎不可能给你任何建议。请提供minimal reproducible example 而不仅仅是错误消息。 可能是权限问题,容器永远不会从 ECR 下载?您可以尝试另一个 docker 映像来排除这种情况。 @petern 我尝试过使用不同的图像标签,这些标签从不存在,它显示CannotPullContainerError
,但使用现有的图像标签,错误是不同的。
请检查您的 CloudWatch 日志。如果您收到Essential container in task exited
,则日志中应该有一些内容描述原因,为什么。对于exec format error
,请参阅***.com/questions/36544293/…。好像你的Dockerfile
有错误。
您可能想发布您的Dockerfile
。
【参考方案1】:
任务定义或 docker-compose 文件中似乎有 depended on
docker 容器。
发生此错误,您有容器 B
在 A
上打开,并且 A
对服务是必要的,因此容器 B
将自动退出。
您需要调试为什么A
退出。
任务中的基本容器已退出
如果在任务定义中标记为必需的容器退出或死亡,这可能会导致任务停止。当必要的容器退出是导致任务停止的原因时,Step 6 可以提供有关容器停止原因的更多诊断信息。
stopped-task-errors
【讨论】:
我没有使用docker-compose.yml
文件。这是一个单一的 docker 容器。
如何启动容器?
我使用的是 Elastic Beanstalk,而后者又使用 ECS 进行部署。我正在使用Dockerrun.aws.json
文件。
我明白了,您可以尝试将 essential 设置为 false
,以便我们得到准确的错误消息。因为如果您正在运行单个容器,则不需要。 docs.aws.amazon.com/AmazonECS/latest/developerguide/…
我试试【参考方案2】:
问题在于 AWS CodeBuild 项目。我错误地为构建提供了错误的架构。 docker镜像建立在不同的架构上,并尝试在部署状态下运行在不同的架构上。我已更改为用于部署的相同架构。 docker hub 映像和 ECR 映像似乎都可以正常工作。
【讨论】:
我来到这里是因为我在我的 M1 Mac 上构建 Docker 映像并将它们推送到 ECR。糟糕!以上是关于Docker 容器在使用 AWS ECR 的 AWS ECS 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
尽管使用 AWS ubuntu 容器,但我得到 AWS ECR 退出状态 255
带有 Amazon ECR Docker 映像的 AWS Elastic Beanstalk
如何通过 AWS EKS 在 ECR 中使用 Docker 映像
如何在 AWS-ECR 中为 docker 映像使用环境变量?
在 AWS EC2 上从 AWS ECR 中提取图像,而不使用 docker login,但使用 EC2 实例角色和 ECR 存储库权限