ECS容器可以访问docker socket吗?

时间:2017-02-14 08:16:11

标签: docker amazon-ecs

我有一个泊坞窗图像,其唯一的目的是启动子泊坞窗图像以进行持续集成。

如果我在任何支持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标志。即使我选择了特权模式,我也不会认为这是通过的。

此图片仅包含一个二进制文件。不可能匆匆进去。如何使用ECS工具进行调试?例如查看docker启动参数。

我怎样才能安装插座?我是否不得不回到管理我自己的启动docker的EC2实例?

2 个答案:

答案 0 :(得分:7)

我得到了这个工作!

诀窍是在任务级别添加一个卷(-v的左侧)然后在容器级别添加它作为挂载,选择放置它的位置({{1的右侧) }})。

答案 1 :(得分:1)

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

不要,只需尝试从Docker容器中插入$ USER_NAME。 /var/run/docker.sock

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

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

逐步:

获取您的ec2用户的组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通常对于root用户为0,对于标准用户为1000。 为了确保您不会猜测:只需使用docker exec登录运行的docker容器(不要使用-u 0),并在提示符开头检查组ID的名称-与上面使用的命令相同!这次您应该记下第一个数字。在这个示例中(应该是):1000

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

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

该数字(组)应与您之前看到的数字之一匹配。现在您知道该怎么办了:

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

这意味着您将root用户和ID为497的组分别分配给/var/run/docker.socks

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

就是这样。