为何Windows11中Docker Desktop仅自动启动MariaDB容器?
问题分析与解决方案
核心原因
仅MariaDB容器自动启动,主要源于两个关键问题:
1. 重启策略配置差异
你的docker-compose.yml中,MariaDB服务明确设置了restart: always,这会让Docker守护进程在Windows 11启动Docker Desktop时自动拉起该容器。而Apache和PHP服务未配置任何restart策略,默认值为no,意味着Docker不会主动重启这些容器,除非手动触发。
2. 容器进程运行方式问题(潜在可能)
如果Apache或PHP的Dockerfile未指定前台运行的主进程,容器启动后会因主进程退出而立即停止,表现为“未启动”。比如:
- Apache镜像若默认用后台模式启动
httpd,容器会在进程转入后台后直接退出; - PHP-FPM若未配置为前台运行,同样会导致容器启动后停止。
修复步骤
步骤1:为Apache和PHP添加重启策略
修改docker-compose.yml,给Apache和PHP服务添加restart: always(或按需选择unless-stopped,避免手动停止后被自动重启):
version: '3' services: apache: build: ./docker/apache container_name: projectx_apache tty: true ports: - '443:443' depends_on: - php - mariadb volumes: - ./:/var/www/projectx/ restart: always # 添加重启策略 php: build: ./docker/php container_name: projectx_php tty: true volumes: - ./:/var/www/projectx/ restart: always # 添加重启策略 mariadb: # 原有配置保持不变 build: ./docker/mariadb container_name: projectx_mariadb restart: always tty: true environment: MYSQL_ROOT_PASSWORD: docker MYSQL_DATABASE: projectx MYSQL_USER: docker MYSQL_PASSWORD: docker ports: - '3306:3306'
步骤2:验证Apache/PHP的Dockerfile进程配置
检查./docker/apache/Dockerfile和./docker/php/Dockerfile,确保主进程为前台运行:
- Apache示例(基于官方httpd镜像):
FROM httpd:latest # 你的其他配置(如复制配置文件、安装依赖等) CMD ["httpd-foreground"] # 确保用前台命令启动 - PHP-FPM示例(基于官方php-fpm镜像):
FROM php:8.2-fpm # 你的其他配置(如安装扩展、复制配置等) CMD ["php-fpm"] # 官方php-fpm镜像默认CMD为前台运行,自定义过需确认
步骤3:测试验证
- 手动启动所有容器,确认正常运行:
docker-compose up -d - 运行
docker ps查看容器状态,确保Apache和PHP容器处于Up状态。 - 重启Docker Desktop,再次运行
docker ps,确认三个容器均自动启动。
内容的提问来源于stack exchange,提问作者miltone
相关产品推荐
相关产品推荐

