如何从同一个docker容器/卷的两个不同版本装入数据?

我正在用nodejs,nginx和一些静态的web数据使用不同的docker容器来编写一个web应用程序。

我想要访问两个不同版本的Web数据。 我的第一个想法是创build一个只有数据的容器,然后将数据目录安装在nginx容器的两个不同的地方

静态数据的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数据卷,但我想知道我是否会遇到同样的问题。

使用数据容器来读取您的问题不是最好的方法。 我会使用版本2卷泊坞窗撰写。 您的所有服务都嵌套在services密钥下,并在创build卷的位置添加新的顶级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

  • 注意启用这些function的版本密钥
  • 我已经假设你想要在/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文件所在的目录中创build两个目录data1data2 ,以便您可以根据需要添加内容,并将显示在容器中。 注意添加./来表示当前目录

我希望这有助于澄清事情

迪伦

编辑

您可以通过指定相同的卷,但使用不同的安装path,将相同的卷数据安装在两个不同的目录中。 例如, data1:/var/www/html/data1data1:/var/www/html/data2将在这两个文件夹中安装相同的卷数据