Docker镜像构建时能否修改内部.dockerignore?远程仓库文件拷贝问题
解决Docker构建时
license.md被忽略的问题 问题根源
你的license.md被忽略,本质是远程仓库根目录的.dockerignore文件里有匹配该文件的规则——可能是直接写了license.md,也可能是用了*.md这类通配符把所有markdown文件都排除了。
可行解决办法
1. 构建时直接调整忽略规则(推荐,无需改文件)
Docker 20.10及以上版本支持用--include参数强制包含指定文件,优先级高于仓库里的.dockerignore:
docker build --include="license.md" .
如果仓库的.dockerignore是用通配符排除了所有md文件(比如*.md),可以先取消排除再包含目标文件:
docker build --exclude="!*.md" --include="license.md" .
2. 临时生成自定义.dockerignore(适配低版本Docker)
如果你的Docker版本太低用不了上面的参数,可以临时生成一个自定义的忽略文件,覆盖仓库里的原文件:
# 复制原.dockerignore内容,添加license.md的例外规则 cat .dockerignore > temp.dockerignore echo "!license.md" >> temp.dockerignore # 指定临时文件构建 docker build --file Dockerfile --dockerignore temp.dockerignore . # 构建完删掉临时文件 rm temp.dockerignore
3. 修改Dockerfile绕开限制(如果允许改Dockerfile)
要是你能修改Dockerfile,可以用两种方式绕过.dockerignore:
- 从公开URL拉取
license.md(如果文件有可访问的地址):
FROM alpine AS builder RUN wget -O /licenses/license.md https://example.com/path/to/license.md
- 从构建机器本地路径拷贝(前提是本地能拿到这个文件):
COPY /本地绝对路径/license.md /licenses/
注意:这种方式需要把该文件所在目录加入构建上下文,或者直接用绝对路径。
关于修改远程仓库的.dockerignore
你明确说完全无权限访问远程仓库,那肯定没办法直接修改仓库里的.dockerignore。只能用上面几种构建时的方案来绕过原规则。
内容的提问来源于stack exchange,提问作者todododo
相关产品推荐
相关产品推荐

