Docker 撰写 ECS 错误:资源处理程序返回消息:“模型验证失败(#/Volumes:数组项不唯一)”
Posted
技术标签:
【中文标题】Docker 撰写 ECS 错误:资源处理程序返回消息:“模型验证失败(#/Volumes:数组项不唯一)”【英文标题】:Docker compose up ECS error: Resource handler returned message: "Model validation failed (#/Volumes: array items are not unique)" 【发布时间】:2021-06-29 02:55:55 【问题描述】:我一直在尝试将我的 Postgres + Backend + Prisma 图像部署到 Amazon ECS,但遇到了这个错误:
资源处理程序返回消息:“模型验证失败(#/Volumes:数组项不唯一)”
我已经坚持了几天,如果有任何帮助,我们将不胜感激。我使用我的 Amazon ECS 上下文运行 docker compose up 来解决此错误。
version: '3.4'
services:
db:
container_name: db
ports:
- 5432:5432
image: postgres:latest
environment:
- POSTGRES_USER=[user]
- POSTGRES_PASSWORD=[password]
volumes:
- my-vol:/var/lib/postgresql/data/2
backend:
depends_on:
- db
container_name: backend
ports:
- 4000:4000
image: [backend image name]
prisma:
depends_on:
- db
container_name: prisma
ports:
- 5555:5555
image: [prisma image name]
environment:
NODE_ENV: production
volumes:
my-vol:
【问题讨论】:
【参考方案1】:AWS 容器服务团队成员在这里。我从未见过该错误,但上面的代码中有些地方似乎不正确,导致我无法对其进行测试。
服务应与版本缩进 如果我尝试使用该卷映射启动(在 AWS 中)Postgres,它会吐出"initdb: error: directory "/var/lib/postgresql/data" exists but is not empty"
错误。即使在 docker 主机(使用docker-compose up
)上本地启动 Postgres 也会失败,尽管我没有在那里进一步调查。你有/2
有什么原因吗?这应该有效吗?
您可以通过指定host:container
端口通过负载平衡器公开所有服务。我假设您只想公开prisma
容器?还是我误解了你在做什么?
这是对您的 compose 稍作修改的版本,对我来说似乎工作得很好:
version: '3.4'
services:
db:
container_name: db
image: postgres:latest
environment:
- POSTGRES_USER=me
- POSTGRES_PASSWORD=mypassword
volumes:
- my-vol:/var/lib/postgresql/data
backend:
depends_on:
- db
container_name: backend
image: nginx
prisma:
depends_on:
- db
container_name: prisma
ports:
- 80:80
image: nginx
environment:
NODE_ENV: production
volumes:
my-vol:
请注意,我刚刚使用伪造的 nginx 映像更改了 prisma 和后端容器映像,只是为了提升堆栈(我还必须将端口更改为 80:80
)。
【讨论】:
这不是将我的 Prisma 端口暴露给容器的正确方法吗?我希望能够使用端口号 [IP]:[port_number] 访问 IP 地址,这就是我的想法。我还在镜像 Dockerfiles 中使用 EXPOSE 来公开端口,但有些事情告诉我这不是正确的方法。 如果这是您的堆栈端点(即您要公开的服务),您肯定需要为 Prisma 容器调用ports
。这样,“消费者”可以访问 Prisma 容器,Prisma 容器可以在内部与后端容器对话,而后端容器可以与 postgres 对话。但是,如果您也为其他容器定义 ports
,它们都将在 LB 上公开暴露(我认为这不是您想要的?)以上是关于Docker 撰写 ECS 错误:资源处理程序返回消息:“模型验证失败(#/Volumes:数组项不唯一)”的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 AWS CLI 运行 ECS 任务时出现资源:内存错误
在 Docker 后面运行的 Nginx 上出现随机 502/503 错误(在 ECS 集群 + ALB 上)