在Dockerfile中仅复制Git跟踪的文件

15

我想知道如何在Dockerfile中实现以下内容(而不使用.dockerignore):

COPY `git ls-tree -r HEAD --name-only` ./

也就是说,只复制在Git存储库中已被跟踪的文件。当然,上述方法行不通,因为Docker不会以这种方式执行shell命令,但可能有类似的解决方法?

这是一个相当常见的问题。例如,在AWS Elastic Beanstalk平台上,可以使用git archive -v -o myapp.zip --format=zip HEAD来解决(https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/applications-sourcebundle.html)。同样,Heroku基于Git push构建其“slugs”(同样,只包括已被Git跟踪的文件)。

总之,我想将应用程序打包成Docker镜像,而且我不想包括所有未跟踪和Git忽略的文件。我希望避免复制.gitignore文件到.dockerignore文件中。

1个回答

8

您可以按照您的建议使用 git archive 存档应用程序:

git archive -v -o myapp.tar.gz --format=tar.gz HEAD

然后,只需从归档文件构建您的Docker镜像:

docker import myapp.tar.gz myapp:latest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接