【发布时间】: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 目录。
实际上secretkey 是data 卷中的一个文件(这是我想要映射到文件/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