【问题标题】:Docker: environment variable in `VOLUME` instruction?Docker:“VOLUME”指令中的环境变量?
【发布时间】:2021-09-19 08:12:27
【问题描述】:

假设我有这个变量:ENV MY_DATA="/my/dir/data"

然后将其用作:VOLUME [$MY_DATA]

构建镜像并连接到容器后,我看到的是这样的:

如果我将其添加为VOLUME ["/my/dir/data"],则不会出现此类工件目录。我需要通过VOLUME 使用一些特殊语法,以便正确呈现我的ENV

【问题讨论】:

  • 为什么将MY_DATA 指定为相对路径?尝试在它前面加上 /
  • @Z4-tier 抱歉,打错字了。
  • 你几乎不需要在 Dockerfile 中使用VOLUME,而且你几乎不需要将图像中的路径设置为环境变量(因为一旦构建了图像,它们就会被修复,而你需要它们来做事像docker run -v 选项)。
  • 好吧。在运行时使用相同的路径作为特定服务配置中的参数。此外,对于必须用于保存持久数据的路径(例如带有本地驱动程序的卷),您不需要 VOLUME 吗?

标签: docker docker-volume


【解决方案1】:

这是一个用于说明的快速 Dockerfile:

FROM busybox
# ARG MY_DATA="/my/dir/data" <- Works too.
ENV MY_DATA="/my/dir/data"
VOLUME $MY_DATA
ENTRYPOINT ls -d /my/dir/data

构建镜像并运行它:

docker build -t <tag> .
docker run -t --rm <tag>
/my/dir/data        # list the volume created as expected
- or -
docker run -it --entrypoint "" --rm <tag> sh
ls -d /my/dir/data  # list the volume created as expected

【讨论】:

  • 出于某种原因,我认为只有路径数组是有效的。但是,是的,您似乎可以简单地指定不带数组的路径或用空格分隔的多个路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
  • 2015-06-17
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多