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

Docker容器内文件夹缺失问题求助(附Docker-Compose及Dockerfile配置)

解决Docker容器内文件夹缺失问题

先把你给出的配置贴出来方便排查:

你的Docker-Compose配置

version: '3.1'
services:
  db:
    image: mysql
    restart: always
    environment:
      - MYSQL_DATABASE=mgsv
      - MYSQL_USER=mgsv_user
      - MYSQL_PASSWORD=mgsvpass
      - MYSQL_ROOT_PASSWORD=mysql123
    volumes:
      - ./mysql:/docker-entrypoint-initdb.d
  www:
    build: ./mGSV
    restart: always
    ports:
      - 8080:8080

你的Dockerfile片段

FROM php:5-apache
RUN apt-get update && apt-get install -y --no-install-r...

下面是一步步排查和解决的思路,你可以跟着来:

排查与解决步骤

1. 先确认本地文件夹结构对不对

先看看你的项目根目录下,./mysql和./mGSV这两个文件夹是不是真的存在:

  • 跑个ls -l看看根目录的文件结构,确保这俩文件夹都在,而且里面有内容(比如./mysql里得有初始化用的SQL脚本,./mGSV里得有完整的Dockerfile和你的项目代码)。
  • 如果./mysql没了,手动建一个:mkdir mysql,把需要的SQL放进去;要是./mGSV路径不对,得确认你的项目代码是不是放在这个目录下。

2. 补全你的Dockerfile,关键步骤不能少

你的Dockerfile命令被截断了,apt-get install -y --no-install-r...后面的内容没写完,这可能导致依赖装不全,甚至影响文件夹生成。比如你的PHP项目肯定需要MySQL扩展吧?得在Dockerfile里加上安装和启用的命令:

FROM php:5-apache
RUN apt-get update && apt-get install -y --no-install-recommends \
    mysql-client \
    && docker-php-ext-install mysqli pdo_mysql \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

最关键的一点:如果你的项目代码要复制到容器里,Dockerfile里必须有COPY命令! 比如把本地./mGSV里的代码复制到Apache的默认目录:

# 把当前目录(Dockerfile所在的./mGSV)的代码复制到容器的/var/www/html
COPY . /var/www/html/

要是没这个命令,容器里的/var/www/html就是空的,自然会出现文件夹缺失的问题。

3. 检查卷挂载是否生效

对于db服务的./mysql:/docker-entrypoint-initdb.d挂载:

  • 先确认./mysql里的文件权限没问题,跑个chmod -R 755 mysql,确保容器能读里面的内容。
  • 进入db容器看看挂载有没有成功:docker exec -it <你的db容器名> ls /docker-entrypoint-initdb.d,要是看不到文件,说明本地路径写错了,得检查是不是相对于docker-compose.yml所在的目录。

对于www服务,要是你没靠Dockerfile的COPY传代码,而是用了卷挂载,得确认挂载路径对不对,比如:

www:
  build: ./mGSV
  restart: always
  ports:
    - 8080:8080
  volumes:
    - ./mGSV:/var/www/html  # 这样本地代码会同步到容器里

4. 删旧镜像容器,重新构建启动

有时候旧的镜像可能留了缓存,导致问题一直存在,先清掉重新来:

# 停止并删除容器
docker-compose down
# 删除旧的www镜像(可以用docker images先查镜像名)
docker rmi <你的www服务镜像名>
# 重新构建并启动
docker-compose up --build

5. 直接进容器看真实情况

要是还是不行,直接进www容器里查看文件结构,一目了然:

docker exec -it <你的www容器名> bash
# 然后看目录
ls -l /var/www/html

这样就能知道到底是复制失败了,还是挂载出问题,再针对性解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:18:17