【问题标题】:AWS Fargate - VolumesAWS Fargate - 卷
【发布时间】:2019-05-14 13:21:01
【问题描述】:

我的 docker compose 文件有问题: 这是我的 docker compose 文件:

version: '3'

  services:
   nginx-proxy:
    image: xxxxx.dkr.ecr.xxxxx.amazonaws.com/xxxx:latest
    container_name: "nginx-proxy"
    restart: always
    ports:
     - "80:80"
     - "443:443"
    volumes:
     - /var/run/docker.sock:/tmp/docker.sock:ro
...

这是以下错误:

ClientException: host.sourcePath should not be set for volumes in Fargate

我的任务定义:

"mountPoints": [],
...
"volumes": [],
...
"readonlyRootFilesystem": false,

我还希望我的卷为“只读”。

有人知道我需要在我的 docker composer 文件中使用哪个变量名吗?

有人可以帮我吗?

谢谢

【问题讨论】:

  • 您正在使用 docker-compose 部署到 Fargate?或者您正在尝试手动将 docker-compose.yml 映射到任务定义?
  • 我正在使用docker-compose部署到fargate!

标签: amazon-web-services docker amazon-ecs aws-fargate


【解决方案1】:

有人知道我需要在我的 docker composer 文件中使用哪个变量名吗?

Fargate 不允许您为绑定挂载指定 hostsourcePath。您可以check the docs for bind volumesthe overview for Fargate task storage docs 了解更多信息。

Fargate 的大前提是它从任务中混淆了底层主机,因此作为最终用户,您与主机交互的选择非常少 - 您不能 ssh 到它,也不能接触它的文件系统。在绑定挂载的情况下,您无法指定host,因为您不知道部署时主机的名称或位置,也无法进一步指定sourcePath,因为您无法知道有关主机上文件系统的任何信息。

尤其是在尝试挂载docker.sock 的情况下,这将使您能够访问主机上运行的每个容器,这些容器可能属于其他帐户/aws 用户。那样会很糟糕。

我可以在 Fargate 中使用绑定挂载吗?

是的。尽管它的用处可能有限,因为您将无法访问底层主机的文件系统来检索从容器传递到主机的任何文件。

如果主机容器实例上不存在 sourcePath 值,则 Docker 守护程序会创建它。

所以绑定挂载的答案本质上是不指定host,Docker 守护进程只会为您创建一个路径。这有帮助吗?可能不是你的情况。

【讨论】:

  • 仍然好奇 Fargate 绑定挂载的真正目的是什么? fargate 隔离了底层主机,那么绑定挂载到底是什么“挂载”?如果两个不同用户的容器将 mount 绑定到主机上的同一个目录会发生什么?
  • "特别是在尝试挂载 docker.sock 的情况下,这将使您可以访问主机上运行的每个容器,这些容器可能属于其他帐户/aws 用户。那将非常糟糕在周围。”这部分与 Fargate 中的情况不同:Fargate 主机不在不同客户之间共享,即使它们只服务于一个任务。在您的帐户中使用 Fargate 运行的每个任务都有自己的 Fargate 主机。
猜你喜欢
  • 2022-01-16
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 2019-05-06
  • 1970-01-01
  • 2021-08-04
  • 1970-01-01
相关资源
最近更新 更多