在持久性和非持久性 Docker 容器之间共享文件

Sharing a file between a persistent and a non persistent Docker Container

我正在使用非持久性的 Caprover with Docker to run a Django project (Django-Cookiecutter)。我也是 运行 同一台服务器上导入 csv 数据的持久性应用程序。我需要这两个应用程序来基本上共享一个文件。这是我想象的样子:

  1. 导入器应用程序导入 csv 数据并将其存储为特定文件夹中的 json 文件。
  2. Django 应用程序访问该文件夹中的 json 文件,并使用我编写的脚本将 json 导入数据库。 我正在努力了解如何从我的 django 应用程序访问包含 json 文件的导入器应用程序中的文件夹。有谁知道我如何在这两个 docker 容器之间实现这一点?

您可以通过mounting两个容器中的相同目录在两个容器之间共享一个目录或文件。这是一个简单的 docker-compose 示例,其中两个容器挂载相同的目录。然后第一个容器写入文件,第二个容器从中读取。

例子

version: '3'

services:
  writer:
    image: alpine
    command:
      [
        "sh",
        "-c",
        "echo hello from writer >/shared-writer/hello.txt"
      ]
    volumes:
      - .:/shared-writer
  reader:
    image: alpine
    depends_on:
      - writer
    command: [ "cat", "/shared-reader/hello.txt" ]
    volumes:
      - .:/shared-reader

通知:

  • 它们都挂载当前目录。
  • 第一个容器写入已安装卷内的文件。
  • 第二个容器从已安装卷内的同一个文件中读取。
  • 容器使用不同的挂载点(/shared-writer/shared-reader)来证明主机中的同一目录可以挂载到容器中的不同位置。

输出

$ docker-compose up
Starting shared-mount-example_writer_1 ... done
Starting shared-mount-example_reader_1 ... done
Attaching to shared-mount-example_writer_1, shared-mount-example_reader_1
reader_1  | hello from writer
shared-mount-example_writer_1 exited with code 0
shared-mount-example_reader_1 exited with code 0