You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose启动已创建容器问题:Selenium Grid部署咨询

解决Docker Compose启动Selenium Grid的容器冲突与自动重启问题

我来一步步帮你搞定这两个问题:

问题1:每次运行Docker Compose前都需要删除容器吗?

完全不需要!你遇到的容器名冲突,根源在于你在docker-compose.yaml里给selenium-hub指定了固定的container_name。当你重启主机后,这个容器其实只是停止运行了,并没有被删除。此时再执行docker-compose up,Compose会尝试创建一个同名的新容器,自然就触发了冲突。

正确的操作姿势:

  • 如果容器只是停止状态,想直接重启它们:

    docker-compose -f docker-compose.yaml start
    

    这个命令会启动所有由Compose创建过的、处于停止状态的容器,不会创建新容器,也就不会有冲突问题。

  • 如果修改了Compose配置,需要重新创建容器:

    # 先停止并删除旧容器、关联网络
    docker-compose -f docker-compose.yaml down
    # 后台模式启动新服务
    docker-compose -f docker-compose.yaml up -d
    

    加-d参数能让容器在后台运行,不占用你的终端窗口。

  • 为什么docker-compose run selenium-hub没用?
    run命令是用来给服务执行一次性临时命令的,它会创建一个全新的临时容器,完全脱离原来的服务配置。你的Selenium节点找不到这个临时hub,自然无法建立连接,所以节点启动无效。

问题2:重启Docker后一键启动所有容器?

当然有办法!只需要在Compose配置中给每个服务添加重启策略,让Docker在启动时自动帮你重启这些容器。

修改你的docker-compose.yaml:

给每个服务(包括hub和三个浏览器节点)加上restart: unless-stopped配置——这个策略的意思是:除非你手动停止容器,否则Docker启动时都会自动重启它。修改后的完整配置如下:

version: "3"
services:
  selenium-hub:
    image: selenium/hub:3.141.59-20200525
    container_name: selenium-hub
    ports:
      - "4444:4444"
    restart: unless-stopped  # 添加自动重启策略
  chrome:
    image: selenium/node-chrome:3.141.59-20200525
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
    restart: unless-stopped  # 添加自动重启策略
  firefox:
    image: selenium/node-firefox:3.141.59-20200525
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
    restart: unless-stopped  # 添加自动重启策略
  opera:
    image: selenium/node-opera:3.141.59-20200525
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
    restart: unless-stopped  # 添加自动重启策略

配置完成后的收尾操作:

  1. 先清理旧容器避免冲突:
    docker-compose -f docker-compose.yaml down
    
  2. 以后台模式启动所有服务:
    docker-compose -f docker-compose.yaml up -d
    

这样一来,不管是重启Docker服务还是重启主机,你的Selenium Grid容器都会自动启动,再也不用手动执行命令啦。


内容的提问来源于stack exchange,提问作者Miracle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 08:12:47