可以使用如下配置文件docker-compose.yml
version: "3" services: # selenium-chrome-1 selenium-chrome-node-1: image: selenium/node-chrome volumes: - /dev/shm:/dev/shm ports: - "5556:5555" restart: always stdin_open: true environment: HUB_HOST: hub_ip HUB_PORT: 4444 NODE_MAX_INSTANCES: 5 NODE_MAX_SESSION: 5 REMOTE_HOST: 节点ip:5556 GRID_TIMEOUT: 60000 shm_size: "2gb" # selenium-chrome-2 selenium-chrome-node-2: image: selenium/node-chrome volumes: - /dev/shm:/dev/shm ports: - "5555:5555" restart: always stdin_open: true container_name: node1 environment: HUB_HOST: hub_ip HUB_PORT: 4444 NODE_MAX_INSTANCES: 5 NODE_MAX_SESSION: 5 REMOTE_HOST: 节点ip:5555 GRID_TIMEOUT: 60000 shm_size: "2gb" # selenium-chrome-3 selenium-chrome-node-3: image: selenium/node-chrome volumes: - /dev/shm:/dev/shm ports: - "5557:5555" restart: always stdin_open: true environment: HUB_HOST: hub_ip HUB_PORT: 4444 NODE_MAX_INSTANCES: 5 NODE_MAX_SESSION: 5 REMOTE_HOST: 节点ip:5557 GRID_TIMEOUT: 60000 shm_size: "2gb" # selenium-chrome-4 selenium-chrome-node-4: image: selenium/node-chrome volumes: - /dev/shm:/dev/shm ports: - "5558:5555" restart: always stdin_open: true environment: HUB_HOST: hub_ip HUB_PORT: 4444 NODE_MAX_INSTANCES: 5 NODE_MAX_SESSION: 5 REMOTE_HOST: 节点ip:5558 GRID_TIMEOUT: 60000 shm_size: "2gb" # selenium-chrome-5 selenium-chrome-node-5: image: selenium/node-chrome volumes: - /dev/shm:/dev/shm ports: - "5559:5555" restart: always stdin_open: true environment: HUB_HOST: hub_ip HUB_PORT: 4444 NODE_MAX_INSTANCES: 5 NODE_MAX_SESSION: 5 REMOTE_HOST: 节点ip:5559 GRID_TIMEOUT: 60000 shm_size: "2gb"启动节点的命令是(前提是hub需要提前启动):
$ docker-compose up -d关闭节点的命令是:
$ docker-compose down 遗留问题按照我上面这种方式搭建Selenium Grid环境,本地节点可以正常执行,但是远端的节点却经常超时,不过从:4444/grid/console界面上看到的节点网络全部都是通的。
之前查过一些资料,貌似需要使用Docker Swarm,它是一个docker集群管理工具, 将若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源 。不过目前还没研究它,后面如果用Docker Swarm有结论之后,我再写文章同步给大家。
总结用docker搭建selenium grid分布式环境,非常方便,基本是一行命令就能启动或者关闭节点。希望我这篇文章能给大家提供一些思路,帮助大家在平时的工作中解决一些问题。
还是那句话,任何技术,只要能帮你解决实际的问题,就是好的技术!