如何在docker卷中映射文件

时间:2017-05-22 15:14:37

标签: docker docker-compose docker-volume

我在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容器中,我可以看到容器data目录中/harbor_storage卷的内容。

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

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

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

实际上secretkeydata卷中的文件(我想将其映射到文件/etc/ui/key:z

我也试过语法中的调整,看看我是否可以告诉撰写我指的是data卷但是抱怨语法错误。这就是我尝试过的(没有运气):

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

任何想法都赞赏。

P.S。我知道我可以调用一个将/harbor_storage/secretkey复制到/etc/ui/key的小脚本,但我仍然希望不必去那个rathole,并能像我想要的那样映射它。

2 个答案:

答案 0 :(得分:2)

只是为了让新人们知道。 现在有可能(因为Docker 2.1.0.X版本是19.x.x引擎),并且方式与文件夹映射相同:

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

答案 1 :(得分:1)

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