我想知道如何在 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 推送构建其“slugs”(同样,仅在 Git 文件中跟踪)。
总而言之,我想将应用程序打包为 Docker 镜像,并且我不想包含所有未跟踪和 Git 忽略的文件。
我想避免将 .gitignore
文件复制到 .dockerignore
文件。
最佳答案
您可以按照您的建议使用 git archive
存档应用程序:
git archive -v -o myapp.tar.gz --format=tar.gz HEAD
然后只需从存档文件构建您的 docker 镜像:
docker import myapp.tar.gz myapp:latest
关于git - 仅复制 Dockerfile 中的 Git 跟踪文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51693245/