Docker打包含子模块的dq-mod仓库:common_utils复制失败求助
解决Docker构建与运行时Git子模块的问题
一、构建时将common_utils内容打包进镜像
问题核心是Git子模块默认仅保存引用信息,未拉取实际文件,Docker构建时需主动初始化拉取子模块内容。修改Dockerfile如下:
# 替换为你的业务所需基础镜像,比如python:3.9-slim FROM python:3.9-slim WORKDIR /app # 安装Git(若基础镜像已自带可省略) RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* # 复制子模块配置文件与Git元数据,用于初始化子模块 COPY .gitmodules . COPY .git/ .git/ # 初始化并拉取子模块完整内容,--recursive适配嵌套子模块场景 RUN git submodule init && git submodule update --recursive # 复制所有仓库文件到镜像工作目录(含已拉取的common_utils) COPY . . # 创建utils目录(若不存在)并复制common_utils内容 RUN mkdir -p utils && cp -r common_utils/* utils/ # 后续添加依赖安装等业务步骤,示例: RUN pip install -r requirements.txt CMD ["./start.sh"]
二、运行时自动拉取common_utils最新内容
修改start.sh,在启动主程序前更新子模块并同步到utils目录:
#!/bin/bash # 拉取common_utils最新代码(替换为子模块实际默认分支,如master) cd common_utils git pull origin main cd .. # 同步最新内容到utils目录 cp -r common_utils/* utils/ # 启动主程序 python main.py
三、常见问题排查
- 若构建时Git命令报错,检查基础镜像是否已安装Git,或子模块远程仓库地址在
.gitmodules中是否配置正确 - 确认复制命令路径无误:工作目录是否为
/app,utils目录是否提前创建 - 若运行时拉取失败,检查容器网络是否能访问子模块的Git仓库
内容的提问来源于stack exchange,提问作者fancybear
相关产品推荐
相关产品推荐

