docker-compose:为bind mount和托管mount定义mount

Trầ*_* Dự 20 docker docker-compose docker-volume

我正在使用docker-compose来定义我的服务.在docker中,docker volume有两个概念.首先是关于bind mount:挂载主机存储.

docker run -d --name web-app -v $HOST/location:/container/location -p 80:80 httpd:latest
Run Code Online (Sandbox Code Playgroud)

其次是关于managed mount:抽象存储,不依赖于主机.

docker run -d --name web-app -v /container/location -p 80:80 httpd:latest
Run Code Online (Sandbox Code Playgroud)

我想将这些概念映射到docker-compose.这意味着我如何定义bind mount以及managed mount何时使用docker-compose.

nwi*_*ler 24

您可以在volumesDocker Compose部分找到这些Docker概念:https://docs.docker.com/compose/compose-file/#/volumes-volumedriver

例子:

volumes:
  # Just specify a path and let the Engine create a volume
  - /container/location

  # Specify an absolute path mapping
  - ./myfolder/location:/container/location
Run Code Online (Sandbox Code Playgroud)

  • 你知道什么语法对`.yml`文件的根目录中的`volumes:`标签有用吗?您的解决方案仅适用于嵌套在`services:`标记下的`volumes:`标记. (7认同)

小智 14

虽然我回答得很晚。但是也许将来会帮助其他人。以下是这两种类型的配置。https://docs.docker.com/compose/compose-file/#volumes

    version: "3.2"
    services:
     web:
      image: httpd:latest
      volumes:
       - type: bind
         source: $HOST/location
         target: /container/location
       - type: volume
         source: mydata
         target: /container/location
     volumes:
      mydata:
Run Code Online (Sandbox Code Playgroud)

  • 已经晚了,但对于其他看到这个的人来说,第二卷看起来缩进得太远了。它应该是顶级标签并与服务级别一致(无缩进)。@艾米多西 (6认同)
  • @NoName:对于绑定安装是的。对于卷,您无法指定特定的源位置。它完全由 docker 管理。 (2认同)

Ara*_*NSR 5

我知道现在回答已经晚了,但我主要是为社区写这篇文章。

回答:

你只需要这样做:

    volumes:
       - ./root/instantclient_12_2/ojdbc8.jar:/etc/kafka-connect/jars/ojdbc8.jar
       - type: bind
         source: $HOST/etc
         target: /kernel-etc
Run Code Online (Sandbox Code Playgroud)

然后,为了在“易于调试模式”下运行它,首先使用它docker-compose up,当你确定它工作正常时,通过-d在最后添加一个环在它上面。

重要笔记

1-确保您的docker-compose版本至少3.23.7. 要更新和摆脱旧版本,请执行以下操作:

sudo apt-get remove docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
Run Code Online (Sandbox Code Playgroud)

来源:https : //github.com/10up/wp-local-docker/issues/58#issuecomment-476786006

2- 不要忘记rm您的旧容器,这样您就不会遇到与端口相关的奇怪问题。就是这样:

docker container stop YOUR_CONTAINER_ID
docker container rm YOUR_CONTAINER_ID
Run Code Online (Sandbox Code Playgroud)

祝你好运。