【问题标题】:How to copy files to a Docker volume and use that volume with docker-compose如何将文件复制到 Docker 卷并将该卷与 docker-compose 一起使用
【发布时间】:2025-12-09 15:55:02
【问题描述】:
  • 在 Docker 容器中运行了一个 Web 服务。
  • 此网络服务依赖于大型 json 文件来启动。

我创建了一个 Docker 卷来存储带有docker volume create my-api-files 的 json 文件。

这是网络服务的docker-compose 文件:

version: '3'

services:
  my-api:
    image: node:alpine
    expose:
      - ${NODE_PORT}
    volumes:
      - ./:/api
      - my-api-files:/files
    working_dir: /api
    command: npm run start

volumes: 
  my-api-files: 
    external: true

现在,如何在使用 docker-compose up 启动 web 服务之前将 json 文件复制到 my-api-files docker 卷?

【问题讨论】:

  • 你不需要复制。 docker volume 会将文件目录挂载到容器内的 my-api-files 目录中
  • 我不想将文件存储在 docker 容器中。这就是为什么我想使用单独的卷
  • * 上有 2017 年的 recipe 并且 docker-compose 有一个未解决的问题 docker-compose copy file or directory to container。 AFAIK 这个问题没有直接的解决方案,但可以解决它
  • 你不需要复制任何东西。您可以将主机上的目录挂载到容器上的路径中。 this post 的第一部分向您展示了如何。

标签: docker docker-compose docker-volume


【解决方案1】:

您可以使用该卷运行一个临时容器并绑定挂载到您的主机文件并从那里运行副本:

docker run --rm -it -v my-api-files:/temporary -v $PWD/jsonFileLocation:/big-data alpine cp /big-data/*.json /temporary
docker run --rm -it -v my-api-files:/test alpine ls /test

您应该会在其中看到您的 JSON 文件。

编辑:当然,用您的 JSON 文件位置和操作系统的语法替换 $PWD/jsonFileLocation

【讨论】: