我正在尝试使用AWS EC2容器服务(ECS)来运行dockerized webdriver(Selenium)网格。根据docker-selenium github页面的介绍,如果要使用selenium-node-chrome镜像上的chrome浏览器运行长时间运行的测试,则需要向docker容器中添加一些shared memorymount 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上对其进行测试。

10-05 22:08