【问题标题】:AWS - Create and attach volume to container in flightAWS - 在飞行中创建卷并将其附加到容器
【发布时间】:2021-08-30 15:09:59
【问题描述】:
假设我在 AWS 中有一个容器化批处理作业。它需要挂载一个快照,用它做一些工作几个小时,然后关闭。问题是在模板/AMI 创建时,特定的快照是未知的/更改。正确的将被标记,并且在运行时很容易查找。如何安装它?
create/attach-volume可以在容器内运行,将快照卷添加到主机。我可以将作业定义为提前有一个挂载点,以便在挂载卷可用时访问它。问题是,我在容器中看不到让主机实际挂载附加卷的方法,所以它在/dev,但没有更多。
【问题讨论】:
标签:
amazon-web-services
docker
docker-volume
aws-batch
【解决方案1】:
原来答案是管道。从这个答案修改:https://stackoverflow.com/a/63719458/2062731
将以下内容添加到user-data 设置监视器。
mkfifo /var/mount_pipe
while true; do sudo mount $(cat /var/mount_pipe); done &
mount_pipe 绑定安装到容器,命令从容器内发送,如echo "/dev/sdh /mnt/foo" > /var/pipe
奖励:为确保新安装的卷在容器中可见,您需要将绑定传播设置为 AWS 不直接支持的非私有内容。在作业定义中定义挂载点时,使用
ContainerPath: "/mnt/foo:rslave" # Add a `:` to push extra args.
由于 arg 未更改地传递给 docker 代理,因此最终结果将是 --volume /mnt/foo:/mnt/foo:rslave。这是无证的,所以要小心,但我不知道在 AWS 中设置绑定传播参数的另一种方法。