【问题标题】:docker-compose: define mount for bind mount and managed mountdocker-compose:为绑定挂载和托管挂载定义挂载
【发布时间】: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 mount 和managed mount。

【问题讨论】:

标签: docker docker-compose docker-volume


【解决方案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” 没有更多上下文
    猜你喜欢
    • 2017-07-05
    • 2021-05-08
    • 2019-02-26
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2021-05-03
    相关资源
    最近更新 更多