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

Docker Compose与Dockerfile的目录及工作目录异常问题

Docker-Compose构建后目录嵌套问题解决

问题现象

单独构建Dockerfile时,容器内/app_folder目录结构符合预期;但通过docker-compose up启动后,容器内/app_folder下出现同名嵌套目录,结构异常。

相关配置文件

docker-compose.yml

version: '3'
services:
  model:
    build: .
    ports:
      - "8080:8080"
    restart: always
    depends_on:
      - "mongo"
    command: uvicorn main:app --reload --host 0.0.0.0 --port 8080
  mongo:
    image: mongo
    restart: always
    ports:
      - "27017:27017"
    environment:
        MONGO_INITDB_ROOT_USERNAME: root
        MONGO_INITDB_ROOT_PASSWORD: example
    volumes:
      - mongo_db_data:/data/db
  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - "8081:8081"
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: example
      ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
volumes:
  mongo_db_data:

原Dockerfile

FROM python:3.8

RUN mkdir app_folder

COPY requirements.txt  app_folder

WORKDIR  app_folder

RUN  pip install -r requirements.txt

COPY . .

问题原因

  1. 原Dockerfile先在容器根目录创建app_folder,复制requirements.txt后切换到该目录,最后执行COPY . .时,若本地上下文存在app_folder目录(可能因之前构建/操作残留),会被一同复制到容器的/app_folder下,形成嵌套。
  2. 单独构建时可能本地无残留的app_folder目录,因此结构正常;而docker-compose构建时上下文包含该目录,导致异常。

解决方案

步骤1:修改Dockerfile

调整为更合理的目录结构写法,利用Docker自动创建工作目录的特性,避免手动创建后可能的路径冲突:

FROM python:3.8

# 设置工作目录,Docker会自动创建不存在的目录
WORKDIR /app_folder

# 先复制requirements.txt,优先利用构建缓存
COPY requirements.txt .

RUN pip install -r requirements.txt

# 复制当前上下文的所有剩余文件到工作目录
COPY . .

步骤2:清理本地残留(若有)

删除本地目录中可能存在的app_folder目录:

rm -rf ./app_folder

步骤3:重新构建并启动

清除旧构建缓存,重新构建镜像并启动服务:

docker-compose build --no-cache
docker-compose up -d

验证

进入容器查看目录结构,确认/app_folder下直接包含requirements.txt、app.py等文件,无嵌套目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:01:14