首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dockerfile添加变量不可扩展

Dockerfile添加变量不可扩展
EN

Stack Overflow用户
提问于 2019-11-01 02:44:17
回答 1查看 32关注 0票数 0

我正在设置一个docker镜像,在dockerfile中我有一个ADD命令,其中ADD命令的源是一个变量。Dockerfile有一个build参数,我想使用这个arg作为ADD命令的源代码。但是ADD命令没有展开变量,我得到了一个错误

请分享您脑海中出现的任何解决方法

代码语言:javascript
复制
FROM ubuntu

ARG source_dir
RUN echo ${source_dir}
ADD ${source_dir} ./ContainerDir

Build命令

代码语言:javascript
复制
docker build . -t image --build-arg source_dir=/home/john/Desktop/
data

错误

代码语言:javascript
复制
Step 3/3 : ADD ${source_dir} ./ContainerDir ADD failed: stat /var/lib/docker/tmp/docker-builder311119108/home/john/Desktop/
data: no such file or directory 

但是,目录(/home/john/Desktop/ data)存在

EN

回答 1

Stack Overflow用户

发布于 2019-11-01 03:11:13

从错误消息中,变量展开并抱怨您在构建上下文中没有路径:

代码语言:javascript
复制
stat /var/lib/docker/tmp/docker-builder311119108/a/b/c: no such file or directory

在您的示例中,构建上下文是. (当前目录),因此您需要在当前目录中使用a/b/c,这样才不会出错。这也不需要在任何./.dockerignore文件中,如果你有一个。

在第二次编辑中:

代码语言:javascript
复制
docker build . -t image --build-arg source_dir=/home/john/Desktop/data

看起来您正试图从构建上下文之外的构建中包含一个目录。这在docker版本中是明确不允许的。ADDCOPY命令所需的所有文件都需要包含在您的上下文中,并且在第一步中,上下文的整个内容都被发送到构建服务器,因此您希望将其保持较小(而不是发送整个主目录)。源始终与此上下文相关,因此/home将查找./home,因为您的上下文在build命令中为.

修复方法是将数据目录移动到.的子目录中,您可以在其中构建docker镜像。您也可以切换到COPY,因为没有您需要的ADD功能。

免责声明:这里有两个过于简单的地方:

经典构建在使用经典COPY.

  • The命令开始构建之前,可以使用--from选项将来自不同上下文的文件发送给
  1. COPY命令。对于发送多少以及上下文的哪些部分,较新的BuildKit实现更加有选择性。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58649528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档