有条不紊地在docker-compose中装入卷

fxm*_*asa 19 docker docker-compose docker-volume

我有一个docker-compose.yml配置.其中一个容器是Tomcat服务器,它.warwebapps目录中部署了一些默认文件.

我希望能够传递(覆盖)war由驻留在主机上的某些人部署的存档.我认为最好的方法是以某种方式切换/覆盖启动docker-compose:默认情况下,我想运行war容器内的webapp(文件),但我希望有可能从我的主机安装目录(用于如果需要,在开发/调试期间的例子.

目前,我在我的行中有以下行,docker-compose.yml如果我需要默认值,则会注释掉.

volumes:
# By default, there is the latest version of the application already present in the container
# If you want to provider the container with your own .war file, uncomment the following line
# - ./application/webapps:/usr/local/tomcat/webapps
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来实现这一目标?

Paw*_*wel 15

由于extend已在版本 3 中删除,因此通过提供多个 -f 参数来覆盖设置的新方法,其中下一个文件扩展了先前的配置

文档在版本之间混合https://docs.docker.com/compose/extends/#multiple-compose-files

即在开发模式下运行

docker-compose -f docker-compose.yml -f docker-compose.dev.yml
Run Code Online (Sandbox Code Playgroud)

wheredocker-compose.yml包含完整的配置并且docker-compose.dev.yml只添加一个卷

services:
  serviceA:
    volumes:
      -.:/usr/local/abc/service
Run Code Online (Sandbox Code Playgroud)


dgu*_*abs 10

我将使用https://docs.docker.com/compose/extends/#example-use-case来运行指定卷的服务扩展,而不是(不)安装注释掉该行的卷.

我这样做是为了解决两个不同的问题:

  • 当docker镜像要在生产中运行并且捆绑了所有必需的文件时,我没有指定卷.
  • 我在开发期间指定一个卷,以检查实时更改.