使用 docker 复制但排除

新手上路,请多包涵

在 Dockerfile 中,我有

COPY . .

我想排除整个目录,在我的例子中是 node_modules 目录。

像这样的东西:

    COPY [all but **/node_modules/**] .

Docker可以做到这一点吗?

原文由 Alexander Mills 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.5k
2 个回答

在您的 docker build 上下文目录中创建文件 .dockerignore (因此在这种情况下,很可能是 node_modules 的父目录),其中包含一行:

 **/node_modules

尽管您可能只想:

 node_modules

关于 dockerignore 的信息: https ://docs.docker.com/engine/reference/builder/#dockerignore-file

原文由 vith 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于那些不能使用 .dockerignore 文件的人(例如,如果您需要一个 COPY 中的文件而不是另一个):

是的,但您需要多个 COPY 指令。具体来说,您需要为要排除的文件名中的每个字母一个 COPY。

 COPY [^n]*    # All files that don't start with 'n'
COPY n[^o]*   # All files that start with 'n', but not 'no'
COPY no[^d]*  # All files that start with 'no', but not 'nod'

继续直到你有完整的文件名,或者只是你有理由确定的前缀不会有任何其他文件。

原文由 Alex 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题