如何从相同 docker container/volume 的两个不同版本装载数据?

How do I mount the data from two different versions of the same docker container/volume?

我正在为 nodejs、nginx 和一些静态网络数据使用单独的 docker 容器编写网络应用程序。

我想访问两个不同版本的网络数据。我的第一个想法是创建一个data only容器,然后在nginx容器的两个不同的地方挂载data目录

静态数据的 Dockerfile 类似于:

FROM ubuntu

RUN mkdir -p /data
ADD build/* /data/

我希望能创作它,做类似的事情:

nginx-site:
    image: my-nginx-image:version
    ports:
    - "80:80"
    volumes_from:
    - data-version-1
    - data-version-2
    links:
    - node-app

node-app:
    image: my-node-app-image:version
    ports:
    - "5000:5000"

data-version-1:
    image: my-data-image:version1
    volume:
    - /data1:/data

data-version-2:
    image: my-data-image:version2
    volume:
    - /data2:/data

但我想我完全误解了卷安装。 /data1、/data2 卷来自主机,而不是将数据容器中的两个不同目录安装到 nginx 容器中。

(即使它不是最好的模式,如果我不想有两个版本的数据,这一切都可以正常工作)

我也阅读了 docker 数据量,但我想知道我是否会 运行 遇到同样的问题。

使用数据容器阅读您的问题并不是最好的方法。我会用 version 2 volumes 代替 docker-compose。您的所有服务都嵌套在 services 键下,我们在创建卷的地方添加了一个新的顶级 volumes 键。然后我们使用我们希望访问该卷的服务下的卷键正常安装卷。查看修改后的撰写文件:

version: "2" services: nginx-site: image: my-nginx-image:version ports: - "80:80" volumes: - data1:/var/www/html/data1 - data2:/var/www/html/data2 links: - node-app node-app: image: my-node-app-image:version ports: - "5000:5000" volumes: data1: driver: local data2: driver: local

  • 记下启用这些功能的版本密钥
  • 我假设您希望 /var/www/html 下的 nginx 容器中有两个不同的可访问目录,请根据需要进行调整
  • 此方法不会向主机公开文件夹 如果您需要此方法,请参阅下面的下一个版本
  • 通过使用版本 2 卷,我们不再有死数据容器,我们的数据在主机上的 /var/lib/docker 中被抽象出来。

version: "2" services: nginx-site: image: my-nginx-image:version ports: - "80:80" volumes: - ./data1:/var/www/html/data1 - ./data2:/var/www/html/data2 links: - node-app node-app: image: my-node-app-image:version ports: - "5000:5000"

  • 这会在 docker-compose.yml 文件所在的目录中创建两个目录 data1data2,因此您可以根据需要添加内容,它们将出现在容器中。 注意添加./ 表示当前目录

我希望这有助于澄清事情

迪伦

编辑

您可以通过指定相同的卷但不同的装载路径将相同的卷数据装载到两个不同的目录中。例如 data1:/var/www/html/data1data1:/var/www/html/data2 将在两个文件夹中装载相同的卷数据