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
号码(组)应该与您之前看到的号码之一相匹配。现在你知道该怎么做了:
- 离开 docker 容器(因为您没有根访问权限来更改所有权)。
sudo chown 1000:497 /var/run/docker.socks
这意味着您将 id 为 1000 的所有者和 id 为 497 的组分配给 /var/run/docker.socks
即使系统中不存在给定的 ID,此命令也有效:用户 ID 1000 很可能仅存在于内部 docker 容器中,而组 497 仅存在于外部容器中。
就是这样。
我有一个 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
号码(组)应该与您之前看到的号码之一相匹配。现在你知道该怎么做了:
- 离开 docker 容器(因为您没有根访问权限来更改所有权)。
sudo chown 1000:497 /var/run/docker.socks
这意味着您将 id 为 1000 的所有者和 id 为 497 的组分配给 /var/run/docker.socks
即使系统中不存在给定的 ID,此命令也有效:用户 ID 1000 很可能仅存在于内部 docker 容器中,而组 497 仅存在于外部容器中。
就是这样。