Docker挂载本地卷后容器初始化文件未自动生成问题排查
PHP+Apache容器挂载本地卷后,容器生成的文件未同步到本地
你遇到的问题核心是Docker本地卷挂载的逻辑问题:当你把本地目录挂载到容器内的目录时,本地目录的内容会直接覆盖容器内对应目录的原有内容,而不是把容器里的文件同步到本地。你挂载的/var/www/html、/etc/ssl、/etc/apache2都是容器启动时会生成默认文件的目录,挂载本地空目录后,容器里的默认文件被覆盖,自然本地看不到这些文件;移除挂载后,容器目录不受影响,默认文件就能正常生成。
解决步骤
- 先启动不带卷挂载的容器,把容器内的默认文件复制到本地对应目录:
# 先注释掉docker-compose.yml里的volumes配置,启动容器 docker compose up -d # 复制容器内的html目录到本地 docker cp apache:/var/www/html /mnt/data/apps/ # 复制容器内的ssl目录到本地 docker cp apache:/etc/ssl /mnt/data/apps/ # 复制容器内的apache配置目录到本地 docker cp apache:/etc/apache2 /mnt/data/apps/ # 停止并删除容器 docker compose down - 恢复docker-compose.yml里的volumes配置,重新启动容器:
此时本地目录已经有容器的默认文件,容器启动时会读取本地的文件,后续容器或本地对目录的修改都会双向同步。docker compose up -d
额外注意事项
- 复制文件前,确保本地
/mnt/data/apps/下的html、ssl、apache子目录不存在或为空,避免复制时出现文件冲突。 - 复制完成后,检查本地目录的权限,确保容器内的
www-data用户(Apache运行用户)有读写权限,否则可能导致服务运行异常:chown -R www-data:www-data /mnt/data/apps/html chmod -R 755 /mnt/data/apps/html
内容的提问来源于stack exchange,提问作者Raul Chiarella
相关产品推荐
相关产品推荐

