我想知道如何在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
文件中。