从docker-compose使用Dockerfile中定义的卷。

3

例如,我在docker-compose文件中定义了这个服务和卷:

  postgres:
    image: postgres:9.4
    volumes:
      - db_data:/var/lib/postgresql/data
  volumes:
    blue_prod_db:
      driver: rancher-nfs

如果您在Dockerfile中像这样定义一个卷:

RUN mkdir /stuff
COPY ./stuff/* /stuff/
VOLUME /stuff

你如何通过docker-compose配置后来访问它并将其添加到容器中?
1个回答

2

当在Dockerfile中配置时,卷会导致从该镜像启动的任何容器(包括稍后在构建过程中使用RUN命令启动的临时容器)在指定位置(例如/stuff)定义一个卷。如果您在运行时未为该卷定义源,则Docker将在该位置为您创建一个匿名卷。但是,您始终可以通过在compose文件中指定位置来定义具有源的卷(即使没有定义该卷):

version: "3"
services:
  app:
    image: your_image
    volumes:
      - data:/stuff
volumes:
  data:

请注意,有两个卷部分,一个用于指定容器内挂载卷的位置的特定服务,另一个位于顶层,您可以在其中指定卷的来源。如果不指定来源,则会得到一个本地卷驱动程序,该驱动程序会将目录绑定到容器中的 /var/lib/docker 下。
我通常不建议在 Dockerfile 中指定卷,因为这会破坏后续步骤中子镜像扩展图像的能力,并且会使文件系统混杂不清,无法轻松跟踪匿名卷的来源。最好通过类似于 compose 文件的方式在运行时定义它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接