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 # 添加自动重启策略
配置完成后的收尾操作:
- 先清理旧容器避免冲突:
docker-compose -f docker-compose.yaml down - 以后台模式启动所有服务:
docker-compose -f docker-compose.yaml up -d
这样一来,不管是重启Docker服务还是重启主机,你的Selenium Grid容器都会自动启动,再也不用手动执行命令啦。
内容的提问来源于stack exchange,提问作者Miracle
相关产品推荐
相关产品推荐

