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

时间:2019-01-03 14:39:32

标签: docker docker-compose dockerfile

例如,我在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 个答案:

答案 0 :(得分:0)

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

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

请注意,有两个卷部分,一个用于特定服务,用于指定将卷安装在容器中的位置,另一个用于顶层,您可以在其中指定卷的来源。不指定源,您将获得一个本地卷驱动程序,该目录下的目录位于/ var / lib / docker bind下,并安装在容器中。

我一般不建议在Dockerfile中指定卷,它会破坏在以后的步骤中为子映像扩展映像的能力,并会因匿名卷而使文件系统混乱,这些卷不易追溯其来源。最好在运行时使用诸如compose文件之类的东西来定义它们。