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

如何将主机目录全量内容复制到Docker容器 支持docker-compose自动执行

实现目录全内容(保留子结构)复制到Docker容器的方案

单次手动复制命令

直接执行以下命令即可,无需挂载、无需修改镜像,纯复制操作:
docker cp ./src/. <替换为你的容器名/容器ID>:/var/www/html/

关键注意点:源路径末尾的/.是核心,若省略直接写./src,会把整个src文件夹本身复制到目标路径下,最终变成/var/www/html/src;加上/.才代表复制src目录下的所有内容(包含文件、任意层级子目录),复制过程会自动保留原有目录结构,同名文件会被覆盖,目标路径下的非冲突文件不会被删除。

docker-compose up 启动自动复制配置

如果需要每次执行docker-compose up -d启动容器时自动完成复制,可通过临时挂载+启动入口执行复制逻辑实现,全程是纯复制效果,不会把业务目录做常驻绑定挂载:
直接参考修改你的docker-compose.yml:

version: '3.8'
services:
  your-service-name:
    # 替换为你实际使用的镜像,比如nginx:alpine、php:apache等
    image: nginx:alpine
    volumes:
      # 只读临时挂载本地src目录,仅用于启动时读取内容做复制,不是业务挂载
      - ./src:/tmp/src-init:ro
    # 启动时先执行复制,再运行镜像原有默认启动命令
    entrypoint: sh -c "cp -r /tmp/src-init/. /var/www/html/ && exec /docker-entrypoint.sh nginx -g 'daemon off;'"

配置说明:

  • 临时挂载仅用于容器启动瞬间读取主机src目录内容,复制完成后容器内/var/www/html是容器内部独立文件系统的内容,后续修改主机src文件不会同步影响容器内运行的文件,完全符合纯复制要求
  • 命令末尾的exec /docker-entrypoint.sh nginx -g 'daemon off;'需要替换为你所用镜像的默认入口启动命令,避免破坏镜像原有启动逻辑:例如使用php:apache镜像时,替换为exec docker-php-entrypoint apache2-foreground即可
  • 如果目标目录存在权限问题,可在cp命令前增加权限调整逻辑,例如针对php环境可加chown -R www-data:www-data /var/www/html

如果不需要每次启动同步主机最新的src内容,只是要把src内容固定打包到镜像里,直接编写Dockerfile在构建阶段复制是更简单的方案:

# 基于你使用的基础镜像
FROM nginx:alpine
# 复制src下所有内容到目标目录,自动保留子目录结构
COPY ./src/. /var/www/html/

之后在docker-compose.yml里配置build路径指向该Dockerfile即可,构建出的镜像会自带所有src内容,启动无需额外复制操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:22:04