ECS 容器可以访问 docker 套接字吗?

Can an ECS container have access to the docker socket?

我有一个 docker 镜像,唯一的目的是启动子 docker 镜像以进行持续集成。

如果我要在任何启用 docker 的计算机上 运行 它,它将是:

docker run -d \
   -e DRONE_SERVER=wss://ci.fommil.com/ws/broker \
   -e DRONE_SECRET=... \
   -e DOCKER_MAX_PROCS=1 \
   -e DRONE_TIMEOUT=30m \
   -v /var/run/docker.sock:/var/run/docker.sock \
   --restart=always \
   --name=drone-agent \
   drone/drone:0.5 agent

但是ECS面板好像不允许我通过v标志。我不认为这是通过的,即使我 select 特权模式。

这张图片只包含一个二进制文件。无法通过 ssh 进入并四处查看。我如何使用 ECS 工具对此进行调试?例如查看 docker 启动参数。

如何安装插座?我是否必须回退到管理我自己的启动 docker 的 EC2 实例?

我成功了!

诀窍是在任务级别(-v 的左侧)添加一个卷,然后在容器级别添加它作为装载,选择放置它的位置(-v 的右侧) =10=]).

fommil 已经发布了解决方案。 可能还需要在 运行 容器中将访问权限更改为 docker.sock。 原因:安装 docker.socks 后,所有者设置为 root,只要您的实际用户不是 root,他就无法访问它 - 这应该是正确的。

不要 尝试从您的 docker 容器中 chown $USER_NAME。 /var/run/docker.袜子

这也会更改源的权限,您将无法从 ec2-user 帐户访问它!

您需要您的用户是正确组的成员或此快速解决方法: 将所有权设置为 docker 容器内的用户,但将组设置为外部 ec2 实例的 docker 组。

一步一步:

获取您的 ec2-user 的组 ID:

id -G ec2-user

输出可能如下所示:

[ec2-user@ip-10-0-xx-xxx ~]$ id -G ec2-user
500 10 **497**

在这种情况下,497 是仅存在于外部 docker shell(ECS 实例)中的 docker 组的 ID。 /var/run/docker.sock 必须分配到 docker 组,以便您可以访问它。

docker 容器内的用户 ID 通常为 0(root)和 1000(标准用户)。 为确保您不会猜测:只需使用 docker exec(不要使用 -u 0)登录到 运行 docker 容器并检查开头的名称您提示组 ID - 与上面使用的命令相同!这次你应该记下 第一个 号。在这个例子中(应该是):1000

还要检查 运行 docker 容器中 docker.sock 的实际设置:ls -la /var/run/docker.sock

这应该显示所有者设置 root 497

号码(组)应该与您之前看到的号码之一相匹配。现在你知道该怎么做了:

  1. 离开 docker 容器(因为您没有根访问权限来更改所有权)。
  2. sudo chown 1000:497 /var/run/docker.socks

这意味着您将 id 为 1000 的所有者和 id 为 497 的组分配给 /var/run/docker.socks

即使系统中不存在给定的 ID,此命令也有效:用户 ID 1000 很可能仅存在于内部 docker 容器中,而组 497 仅存在于外部容器中。

就是这样。