You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 20.04下Docker Compose主机卷目录为空问题求助

问题分析与解决方案

为什么挂载点未按配置生效?

你混淆了Docker里命名卷和绑定挂载的核心概念:

  • 你在docker-compose.yml里配置的是命名卷(比如magento-sandbox_magento_data),这种卷由Docker自动管理存储路径,默认就是/var/lib/docker/volumes/<卷名>/_data,完全和你指定的主机目录无关。
  • 而你想要的是绑定挂载——直接把主机的某个目录映射到容器内的路径,实现主机目录与容器目录的实时同步。

另外,Bitnami的Magento镜像有个关键特性:第一次启动容器时,会检查容器内的目标目录是否为空,如果是空的,就会把预打包的Magento文件复制进去。但因为你用了命名卷,这些文件都存在了Docker管理的卷里,你的主机目录自然是空的。


如何让主机指定目录包含所有页面所需文件?

按照以下步骤操作即可解决:

1. 停止并清理现有容器和卷

首先要把当前运行的容器和关联的命名卷彻底删掉(避免旧数据干扰新的挂载配置):

# 停止并移除容器,同时删除关联的命名卷
docker-compose down -v

-v参数是关键,它会自动清理所有服务绑定的命名卷。

2. 修改docker-compose.yml配置

把原来的命名卷配置改成绑定挂载的写法。假设你原来的配置是这样的:

volumes:
  magento_data:
services:
  magento:
    image: bitnami/magento
    volumes:
      - magento_data:/bitnami/magento

直接修改为绑定挂载格式(无需保留volumes节点下的命名卷定义):

services:
  magento:
    image: bitnami/magento
    volumes:
      - /home/tomas/Documents/Projects/Magento/magento-sandbox/webroot:/bitnami/magento

格式规则是主机绝对路径:容器内目标路径,确保主机路径是完整的绝对路径。

3. 重新启动容器

执行启动命令:

docker-compose up -d

这时候Bitnami镜像会检测到容器内的/bitnami/magento目录(对应主机的webroot目录)是空的,自动把所有Magento核心文件复制到这个目录里。

4. 验证结果

等待容器启动完成后,去主机的指定目录检查:

ls -la /home/tomas/Documents/Projects/Magento/magento-sandbox/webroot

你会看到Magento的所有核心文件已经同步到主机目录,同时浏览器依然可以正常访问页面。


额外注意事项

  • 后续修改主机目录里的文件,容器内的对应文件会实时同步,反之亦然。
  • 提前设置主机目录的权限:Bitnami镜像通常用1001用户运行,避免启动时出现权限报错,可以先执行:
sudo chown -R 1001:1001 /home/tomas/Documents/Projects/Magento/magento-sandbox/webroot

内容的提问来源于stack exchange,提问作者pro100tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:17:39