Docker容器中数据库显示异常:定义为blue却显示red
问题
我在docker-compose.yaml中定义的数据库名为blue,配置内容如下:
version: '3' services: #PHP Service ngxapp: build: context: . dockerfile: Dockerfile image: andys container_name: ngxapp restart: unless-stopped tty: true environment: SERVICE_NAME: ngxapp SERVICE_TAGS: dev working_dir: /var/www volumes: - ./:/var/www - ./php/local.ini:/usr/local/etc/php/conf.d/local.ini networks: - app-network #Nginx Service ngxwebserver: image: nginx:alpine container_name: ngxwebserver restart: unless-stopped tty: true ports: - "8097:80" - "4431:443" volumes: - ./:/var/www - ./nginx/conf.d/:/etc/nginx/conf.d/ networks: - app-network #MySQL Service ngxdb: image: mysql:5.7.22 container_name: ngxdb restart: unless-stopped tty: true ports: - "3418:3306" environment: MYSQL_USER: root MYSQL_DATABASE: blue MYSQL_ROOT_PASSWORD: password SERVICE_TAGS: dev SERVICE_NAME: mysql volumes: - dbdata:/var/lib/mysql/ - ./mysql/my.cnf:/etc/mysql/my.cnf networks: - app-network #Docker Networks networks: app-network: driver: bridge #Volumes volumes: dbdata: driver: local
从配置文件里能看到数据库是blue,但终端查看数据库时却显示为red。我之前创建过一个定义为red的数据库容器,已经完全删除了,尝试用--build标志重启容器后问题还是没解决,这是什么原因?
原因及解决方法
问题核心是Docker本地卷dbdata未被删除,具体细节和解决步骤如下:
- MySQL容器首次启动时,会根据环境变量创建初始数据库(也就是你之前的
red),并将数据持久化到dbdata卷中。 - Docker的本地卷默认不会随容器删除而自动清除,旧容器删除后,
dbdata卷里依然保留着red数据库的全部数据。 - 即便修改
docker-compose.yaml里的MYSQL_DATABASE为blue,重启容器时,MySQL检测到数据目录已存在(来自dbdata卷),会跳过初始化流程,直接使用旧数据,所以你看到的还是red数据库。
解决步骤:
- 停止并删除当前运行的容器:
docker-compose down
- 删除存储旧数据的
dbdata卷:
# 精准删除目标卷(卷名通常为[项目目录名]_dbdata) docker volume rm your_project_name_dbdata # 或者清理所有无关联容器的卷(谨慎操作,会删除所有未被使用的卷) # docker volume prune
- 重新启动容器,MySQL会根据新环境变量创建
blue数据库:
docker-compose up -d
内容的提问来源于stack exchange,提问作者cookie
相关产品推荐
相关产品推荐

