挂载卷至/var/www/html路径不存在,Docker Compose配置求助
问题分析与解决方案
嘿,我来帮你拆解这个问题——你其实是搞混了Docker里命名卷和绑定挂载的核心区别啦!
为什么主机/var下找不到www文件夹?
你在docker-compose.yml里定义的exercise1是一个Docker命名卷,这种卷是由Docker引擎统一管理的,它的实际存储位置并不在你主机的/var/www/html路径下,而是Docker自己的专属存储目录里(Linux系统一般是/var/lib/docker/volumes/exercise1/_data)。
简单说:命名卷和主机的文件系统结构没有直接关联,所以你在主机的/var目录下自然找不到对应的www文件夹,这完全是正常现象!
两种解决思路,看你需求选:
1. 继续使用命名卷(适合管理容器数据,不直接在主机修改)
如果你的需求是让Docker帮你管理这个卷的数据,那不用改配置,只是查看数据的方式要变:
- 直接进入容器查看内容:
docker-compose exec exercise1 ls /var/www/html - 或者找到命名卷在主机的实际路径查看:
先执行docker inspect exercise1,在输出里找到Mounts字段下的Source值,那就是这个卷在主机的真实存储路径,直接去那里看文件就行。
2. 改用绑定挂载(需要主机目录和容器目录同步)
如果你想把主机的某个本地目录挂载到容器的/var/www/html,那就要修改volumes的写法,把命名卷换成主机的路径:
比如先在主机当前目录创建一个html-files文件夹,然后修改docker-compose.yml:
version: '3' services: exercise1: image: tutum/apache-php ports: - '80:80' volumes: - ./html-files:/var/www/html # 相对路径写法,也可以用绝对路径比如/home/yourname/html:/var/www/html # 这里可以删掉volumes: exercise1的定义,因为不需要命名卷了
这样启动后,主机的html-files目录就会和容器的/var/www/html同步,你在主机这个目录里放的文件,容器里就能看到啦。
验证小技巧
不管用哪种方式,启动容器后都可以用这条命令确认容器里的/var/www/html路径是否正常挂载:
docker-compose exec exercise1 df -h /var/www/html
输出里会显示挂载的来源,帮你确认挂载是否生效。
内容的提问来源于stack exchange,提问作者adsds
相关产品推荐
相关产品推荐

