我有一个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标志。我不认为这是通过,即使我选择特权模式。
此映像只包含一个二进制文件。这是不可能的ssh和戳周围。如何使用ECS工具对此进行调试?例如,查看Docker启动参数。
我怎样才能安装插座呢?我是否必须退回到管理我自己的EC2示例来启动docker?
3条答案
按热度按时间bfhwhh0e1#
我把它修好了!
诀窍是在任务级别(
-v
左手)添加一个卷,然后在容器级别将其添加为挂载,选择放置位置(-v
的右侧)。mutmk8jj2#
fommil已经发布了解决方案。可能还需要在运行的容器中更改对docker.sock的访问权限。原因:在挂载docker.socks后,所有者被设置为root,只要你的实际用户不是root,他就不能访问它--这应该是真的。
不要只是尝试从你的docker容器中chown $USER_NAME。/var/run/docker.sock
这也会改变源代码的权限,你将无法从ec2-user帐户访问它!
您需要您的用户是正确组的成员,或者使用以下快速解决方法:将所有权设置为docker容器内的user,但将group设置为外部ec2示例的docker group。
一步一步:
获取ec2-user的组ID:
输出可能如下所示:
在这种情况下,497是docker组的id,它只存在于docker shell (ECS-Instance)中。/var/run/docker.sock必须分配给docker组,以便您可以访问它。
Docker容器中的用户ID通常是0(root用户)和1000(标准用户)。为了确保你不会猜到:只需使用docker exec登录到正在运行的docker容器(不要使用-u 0),并在提示符开头检查名称,组id -与上面使用的命令相同!这一次你应该注意到第一个号码。在这个例子中(应该是这样的):1000
另外,请检查正在运行的docker容器中docker.sock的实际设置:ls -la /var/run/docker.sock
这应该显示所有者设置 root 497
数字(组)应该与您以前见过的数字之一匹配。现在你知道该怎么做了:
1.离开docker容器(因为您没有root访问权限来更改所有权)。
sudo chown 1000:497 /var/run/docker.socks
这意味着您将id 1000的所有者和id 497的组作为root分配给/var/run/docker.socks
即使给定的id在系统上不存在,此命令也可以工作:用户ID 1000将最有可能仅存在于内部Docker容器内,而组497将仅存在于外部容器中。
就这样
bsxbgnwa3#
添加到现有的答案,这里是一种使用任务定义JSON的方法。