docker-compose:为绑定挂载和托管挂载定义挂载

Posted

技术标签:

【中文标题】docker-compose:为绑定挂载和托管挂载定义挂载【英文标题】:docker-compose: define mount for bind mount and managed mount 【发布时间】:2017-05-09 01:05:29 【问题描述】:

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

docker run -d --name web-app -v $HOST/location:/container/location -p 80:80 httpd:latest

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

docker run -d --name web-app -v /container/location -p 80:80 httpd:latest

我想将这些概念映射到 docker-compose。这意味着在使用 docker-compose 时如何定义bind mountmanaged mount

【问题讨论】:

检查docs.docker.com/compose/compose-file/#/volumes-volumedriver 无意冒犯,但你问了很多关于如何使用 Docker Compose 的基本问题。我建议您开始阅读 Docker Compose 概述,它解释了您所询问的所有基本概念:docs.docker.com/compose/overview 【参考方案1】:

您可以在 Docker Compose 的 volumes 部分找到这些 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

【讨论】:

您知道.yml 文件根目录中的volumes: 标记适用什么语法吗?您的解决方案仅适用于嵌套在 services: 标记下的 volumes: 标记。 据我所知,只有命名卷应该列在***卷键中。与绑定挂载或 tmpfs 挂载相比,“命名卷”是一种为容器保存数据的特殊方法。 docs.docker.com/storage【参考方案2】:

虽然我回答得很晚。但也许它会在未来帮助其他人。 以下是这两种类型的配置。 https://docs.docker.com/compose/compose-file/compose-file-v3/#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:

【讨论】:

来晚了,但对于其他看到这个的人来说,第二卷似乎缩进得太远了。它应该是***标签并与服务级别内联(无缩进)。 @AmyDoxy 文档链接对我不起作用,在这里找到了信息:github.com/compose-spec/compose-spec/blob/master/… 您不能为卷指定特定的源位置吗?【参考方案3】:

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

答案:

你只需要这样做:

    volumes:
       - ./root/instantclient_12_2/ojdbc8.jar:/etc/kafka-connect/jars/ojdbc8.jar
       - type: bind
         source: $HOST/etc
         target: /kernel-etc

然后,为了在“易于调试模式”下运行它,首先使用docker-compose up 进行操作,当您确保它工作正常时,通过在末尾添加-d 在其上添加一个环。

重要提示

1-确保您的docker-compose 版本至少为3.2,在我的情况下为3.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

来源: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

祝你好运。

【讨论】:

【参考方案4】:

从 OSX 上的 Docker 3 开始,我必须禁用 Experimental Feature gRPC 并按照以下方式重新启动: https://github.com/microsoft/vscode-remote-release/issues/4171

【讨论】:

@dippas 这就是问题所说的“禁用实验性功能 gRPC” 没有更多上下文

以上是关于docker-compose:为绑定挂载和托管挂载定义挂载的主要内容,如果未能解决你的问题,请参考以下文章

使用绑定挂载的主机目录和容器之间的 Docker 文件权限不匹配

在 docker-compose 中挂载 NFS 卷时连接超时

docker-compose 等待启动,直到挂载主机文件系统

Azure Fileshare - 使用 Docker-Compose 将不同的子文件夹/文件挂载到 ACI 上的卷

有条件地在 docker-compose 中挂载卷

docker run 和 docker-compose 配置挂载 Volume 并运行 nginx