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

如何将含.toml文件的目录完整复制到Docker容器中?

解决方案:复制含.toml文件的目录并保留结构

Docker的COPY **/*.toml ./指令仅会将匹配的.toml文件直接复制到目标目录根下,不会保留原有的目录层级——因为该通配符模式仅匹配文件,不携带路径信息。以下是两种可行的解决方法:

方案一:多阶段构建(推荐,灵活可控)

借助多阶段构建筛选目标目录,完整保留原结构,同时可灵活控制是否复制目录内的所有内容:

FROM alpine:latest AS builder

# 将主机源码复制到构建阶段的临时目录
COPY . /source

# 创建目标目录,筛选并复制所有含.toml的目录
RUN mkdir -p /target && \
    # 找到所有.toml文件,提取其父目录并去重
    find /source -type f -name "*.toml" | sed 's|/[^/]*\.toml$||' | sort -u | while read dir; do \
        # 计算相对路径,在目标目录下创建对应层级
        rel_dir="${dir#/source/}"
        mkdir -p "/target/$rel_dir"
        # 复制该目录下的所有内容到目标路径
        cp -r "$dir"/* "/target/$rel_dir"
    done

# 最终业务镜像
FROM python:3.8

# 安装依赖
RUN pip install toml

# 从构建阶段复制筛选后的目录结构
COPY --from=builder /target ./

方案二:.dockerignore配合COPY(适合简单场景)

如果仅需保留含.toml文件的目录及其中的.toml文件(无需目录内其他文件),可通过忽略规则实现:

  1. 创建.dockerignore文件:
# 先排除所有内容
*
# 包含所有.toml文件
!**/*.toml
# 必须包含.toml文件的父目录(Docker无法复制不存在的目录下的文件)
!**/
  1. 修改Dockerfile:
FROM python:3.8

RUN pip install toml

# 复制所有被允许的内容(含.toml的目录及其中的.toml文件)
COPY . ./

注意:此方案会排除目录内的非.toml文件,若需保留目录完整内容,请使用方案一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:12:41