【问题标题】:Amazon ECS support for --shm-size in dockerAmazon ECS 对 docker 中的 --shm-size 的支持
【发布时间】:2017-08-03 02:04:53
【问题描述】:

我正在尝试使用 AWS EC2 容器服务 (ECS) 来运行 dockerized webdriver (Selenium) Grid。根据docker-selenium github 页面,如果我们想在selenium-node-chrome 图像上使用chrome 浏览器运行长时间运行的测试,我们需要添加一些shared memorymount a volume 到docker 容器中。

在我的 EC2 实例上,当我执行

df -h

我看到/dev/shm 存在并且有3.7Gb of available free space。但是,如果我使用 -v /dev/shm:/dev/shm 属性将卷安装到我的 chrome-node 容器,则在我运行测试时浏览器甚至都不会出现。但是,如果我挂载父目录 /dev ,测试似乎会运行几秒钟,然后我得到“无法访问浏览器异常”,因为浏览器正在关闭(我能够通过 VNC 查看器确认这一点)。这让我意识到通过 ECS 接口/api 挂载卷是没有用的。

如果我通过 --shm-size 之类的属性直接启动 docker 而不通过 ECS 路由

docker run --shm-size=2500m ....

测试运行似乎没有任何问题。

但是,截至目前,ECS clearly does not support the --shm-size 的财产。那么如何修复或解决这个问题并仍然使用 ECS 传递--shm-size 属性?避免使用 ECS 是这里的唯一方法还是有其他更好的方法?

【问题讨论】:

    标签: amazon-web-services docker amazon-ec2 shared-memory amazon-ecs


    【解决方案1】:

    解决方法:

    在你的 dockerfile 中添加下面的 (EntryPoint) 命令作为最后一行

    ENTRYPOINT shm_dir=/dev/shm;umount $shm_dir;mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=*<size eg. 500m,1Gb>* shm $shm_dir  && /bin/bash
    

    我已在本地 docker 中测试过此更改,尽管它需要 --privileged 或至少 --cap-add SYS_ADMIN。我还没有在 AWS 上测试它。

    【讨论】:

    • 至少在 ECS Fargate 中不起作用,因为容器无法在特权模式下运行
    猜你喜欢
    • 1970-01-01
    • 2022-06-26
    • 2019-07-26
    • 2017-10-13
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    相关资源
    最近更新 更多