Docker Compose重复运行仅重建Selenium而非PostgreSQL的问题
解决Docker Compose重复重建Selenium服务的问题
问题原因
PostgreSQL官方镜像内置了VOLUME /var/lib/postgresql/data声明,Docker Compose会自动为这个目录创建匿名卷并关联容器,哪怕容器停止,卷和容器实例都会被保留,所以第二次执行docker compose up时会直接复用现有容器。而Selenium官方镜像没有定义任何持久化卷,默认情况下,当容器停止后,Compose没有关联的持久化资源可识别,会判定需要重建容器。
解决方案
你可以通过以下两种方式让Selenium服务和PostgreSQL一样被Compose复用:
1. 添加持久化卷
在Selenium服务中挂载一个命名卷(即使挂载到容器内无关紧要的目录),让Compose为其维护容器关联状态:
services: database: image: postgres:15-alpine # 补充你的数据库配置(如环境变量、端口映射等) selenium: image: selenium/standalone-firefox:4.8.1-20230306 shm_size: 2gb volumes: - selenium_temp:/tmp/selenium # 挂载到容器内临时目录,仅用于关联状态 volumes: selenium_temp: # 定义命名卷
2. 配置重启策略
给Selenium服务添加restart: unless-stopped,确保容器停止后不会被自动清理,下次up时直接启动现有容器:
services: selenium: image: selenium/standalone-firefox:4.8.1-20230306 shm_size: 2gb restart: unless-stopped
额外提示
如果需要执行一次性命令,优先使用docker compose exec selenium <命令>进入已运行的Selenium容器,而不是docker compose run——后者会创建全新的临时容器,不会复用现有服务实例。
内容的提问来源于stack exchange,提问作者Falc
相关产品推荐
相关产品推荐

