【问题标题】:How to map a file in a docker volume如何在 docker 卷中映射文件
【发布时间】:2017-05-22 15:14:37
【问题描述】:

我在 docker-compose 文件中有一个特殊的用例。以下是此类文件的摘录,足以证明该问题。

version: '2'

volumes: 
  data: 
    #external: true
    driver: rancher-nfs

services:
  harbor-setupwrapper:
    image: mreferre/harbor-setupwrapper:1.1.1-1
    container_name: harbor-setupwrapper
    volumes:
      - data:/data
    command: ["/harbor/harbor-setupwrapper.sh"]
    network_mode: "none"

  ui:
    image: vmware/harbor-ui:v1.1.1
    container_name: harbor-ui
    restart: always
    volumes:
      - data:/harbor_storage 
      - /data/secretkey:/etc/ui/key:z
    depends_on:
      - harbor-setupwrapper
    entrypoint:
      - /bin/sh
      - -c
    command:
      - /configui/entrypointui.sh

基本上,我的用例如下:我创建了一个 docker 卷 (data),并将其挂载在安装容器中(我使用的是常规 NFS 驱动程序)。该设置容器在卷内生成一堆配置文件。

然后我需要将整个卷映射到另一个容器中:

- data:/harbor_storage

这很好用,在ui 容器中,我可以看到容器/harbor_storage 目录中data 卷的内容。

但是我还需要在ui 容器内的特定目录内映射data 卷中的特定文件:

-/data/secretkey:/etc/ui/key:z

这不起作用,因为它基本上将主机本地的/data/secretkey 目录映射到容器内的/etc/ui/key:z 目录。

实际上secretkeydata 卷中的一个文件(这是我想要映射到文件/etc/ui/key:z 的文件。

我还尝试对语法进行调整,看看我是否可以告诉 compose 我指的是data 卷,但 compose 抱怨语法错误。这是我尝试过的(没有运气):

- data/secretkey:/etc/ui/key:z

任何想法表示赞赏。

附:我知道我可以调用一个将/harbor_storage/secretkey 复制到/etc/ui/key 的小脚本,但我仍然希望不必进入那个鼠洞并能够像我尝试做的那样映射它。

【问题讨论】:

  • 您可以挂载该鼠洞脚本,而无需创建新映像。将脚本放在 docker-compose 看到的地方,挂载到容器中,然后以 command 的身份运行,链接到真正的命令
  • 谢谢。鉴于我已经有一个在容器中开始实际进程之前执行“操作”的脚本,我选择调整现有脚本以正确放置文件。它工作得很好。谢谢。

标签: docker docker-compose docker-volume


【解决方案1】:

只是为了让新人知道。 现在可以了(从docker 2.1.0.X版本开始,引擎19.x.x),方式和文件夹映射一样:

volumes:
  - ~/dev/environment/configuration.properties:/opt/data/configuration.properties

【讨论】:

  • 您能否详细说明您的答案?目前尚不清楚该映射将如何在问题的上下文中发挥作用。
【解决方案2】:

目前无法挂载卷的子目录。您必须从该卷中提取该密钥并安装它,或者复制或符号链接它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多