我正在尝试使用AWS EC2容器服务(ECS)来运行dockerized webdriver(Selenium)Grid。根据{{3}} github页面,如果我们想使用docker-selenium上的Chrome浏览器运行长时间运行的测试,我们需要向docker容器添加一些shared memory
或mount a volume
图像。
在我的EC2实例上,当我做
时df -h
我看到/dev/shm
存在并且3.7Gb of available free space
。但是如果我使用-v /dev/shm:/dev/shm
属性将卷装入我的chrome节点容器,那么当我运行测试时,浏览器甚至不会出现。但是,如果我挂载父/dev
目录,测试似乎运行了几秒钟,然后我得到了#34;无法达到浏览器异常"因为浏览器然后关闭(我能够通过VNC Viewer确认)。这让我意识到通过ECS接口/ api安装卷不会有帮助。
如果我直接启动docker而不通过ECS路由传递--shm-size
属性,如
docker run --shm-size=2500m ....
测试似乎没有任何问题。
但是,selenium-node-chrome属性截至目前。那么如何解决或解决这个问题仍然使用ECS传递--shm-size
属性?在这里避免使用ECS是唯一的方法还是有其他更好的方法?
答案 0 :(得分:0)
解决方法:
将以下(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 中测试了此更改,并且它按预期工作(尚未在aws上测试)。
感谢Anor提供此解决方法。 资料来源:anor's blog