我正在尝试使用 AWS EC2 容器服务 (ECS) 来运行 dockerized webdriver (Selenium) Grid。根据docker-selenium如果我们想在 selenium-node-chrome 上使用 chrome 浏览器运行长时间运行的测试,我们需要添加一些 shared memory
或 mount a volume
到 docker 容器中。图片。
在我的 EC2 实例上,当我执行
df -h
我看到 /dev/shm
存在并且有 3.7Gb 的可用空间
。但是,如果我使用 -v/dev/shm:/dev/shm
属性将卷安装到我的 chrome-node 容器,则在我运行测试时浏览器甚至都不会出现。但是如果我挂载父 /dev
目录,测试似乎会运行几秒钟,然后我得到“无法访问浏览器异常”,因为浏览器正在关闭(我能够确认这通过 VNC 查看器)。这让我意识到通过 ECS 接口(interface)/api 挂载卷是没有帮助的。
如果我通过传递 --shm-size
属性(如
docker run --shm-size=2500m ....
测试运行似乎没有任何问题。
但是,ECS clearly does not support the --shm-size
截至目前的属性(property)。那么如何修复或解决这个问题并仍然使用 ECS 传递 --shm-size
属性?避免使用 ECS 是这里的唯一方法还是有其他更好的方法?
最佳答案
解决方法:
在你的 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
我已经在 local docker 中测试了此更改,尽管它需要 --privileged
或至少 --cap-add SYS_ADMIN
。我还没有在 AWS 上测试它。
关于amazon-web-services - Amazon ECS 对 docker 中的 --shm-size 的支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42757154/