我正在尝试使用AWS EC2容器服务(ECS)来运行dockerized webdriver(Selenium)网格。根据docker-selenium github页面的介绍,如果要使用selenium-node-chrome镜像上的chrome浏览器运行长时间运行的测试,则需要向docker容器中添加一些shared memory
或mount a volume
。
在我的EC2实例上,当我执行
df -h
我看到
/dev/shm
存在并且具有3.7Gb of available free space
。但是,如果我使用-v /dev/shm:/dev/shm
属性将卷安装到chrome-node容器中,则在运行测试时浏览器甚至无法启动。但是,如果我挂载父/dev
目录,测试似乎会运行几秒钟,然后我会收到“无法到达浏览器异常”,因为浏览器随后被关闭了(我能够通过VNC Viewer确认这一点)。这使我意识到,通过ECS接口(interface)/api安装卷将无济于事。如果我通过像这样传递
--shm-size
属性来直接启动docker而不通过ECS路由docker run --shm-size=2500m ....
测试似乎没有任何问题。
但是,截至目前,ECS clearly does not support the
--shm-size
属性。那么,如何解决或解决此问题并仍然使用ECS传递--shm-size
属性?是避免唯一使用ECS的方法,还是还有其他更好的方法? 最佳答案
解决方法:
在(EntryPoint)命令下方添加为dockerfile中的最后一行
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上对其进行测试。