与docker-compose版本3等效的volumes_from(来自版本2)

时间:2020-06-06 05:05:23

标签: docker docker-compose

我一直在关注一个博客,该博客通过https://blog.harveydelaney.com/hosting-websites-using-docker-nginx/

使用SSL设置Nginx

本文引用了一个docker-compose.yml文件,该文件开头没有指定版本,但我认为它至少是版本2,因为它确实引用了其中的volumes_from设置。版本3不再支持此volumes_from

有人可以帮助将以下文件迁移到版本3吗?我是docker / docker-compose / K8s世界的新手。

version: "3.8"

services:
    proxy:
      image: jwilder/nginx-proxy
      container_name: nginx-proxy
      ports:
        - '80:80'
        - '443:443'
      volumes:
        - /var/run/docker.sock:/tmp/docker.sock:ro
        - /etc/nginx/vhost.d
        - /usr/share/nginx/html
        - C:\Data\DockerData\nginxSSL\certs:/etc/nginx/certs:ro

    ssl-companion:
      image: jrcs/letsencrypt-nginx-proxy-companion
      container_name: ssl-companion
      volumes:
        - C:\Data\DockerData\nginxSSL\certs:/etc/nginx/certs:rw
        - /var/run/docker.sock:/var/run/docker.sock:ro
      volumes_from: # <-- version 3 doesn't like this
        - proxy
      depends_on:
        - proxy

答案后更新:(适用于希望查找有问题的答案的人)

  • 第3版不再支持volumes_from,根据以下David的回答,有两种选择:

    1. 使用撰写版本2,
    2. 或在服务之间重复需要相同的每个卷

1 个答案:

答案 0 :(得分:1)

Compose file version 3 upgrade nodes说:

volumes_from:要在服务之间共享卷,请使用top-level volumes option对其进行定义,并使用service-level volumes option从共享该内容的每个服务中对其进行引用。

您必须对要共享的每个目录执行此操作。对于nginx虚拟主机目录,例如:

version: '3'
volumes:
  vhosts: # can be empty
services:
  proxy:
    volumes:
      - vhosts:/etc/nginx/vhost.d
  ssl-companion:
    volumes:
      - vhosts:/etc/nginx/vhost.d

使用volumes_from:选项通常有点不寻常:它涉及到一个容器要使用另一个容器的每个卷,并且它们的文件系统布局兼容,以便它们可以使用精确的相同的路径。

(您在问题中提到了Kubernetes。在Kubernetes Pod之间共享文件非常棘手,因为大多数标准卷类型一次只能安装在一个位置,通常,您应该尝试围绕需要共享的卷进行设计[甚至在普通Docker中]。在这种特定情况下,两个进程紧密相连,您可以创建一个emptyDir卷,以在单个容器中的两个容器之间共享,但这通常是不寻常的设置。)