git - 仅复制 Dockerfile 中的 Git 跟踪文件

标签 git docker

我想知道如何在 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/

相关文章:

selenium - 如何在 Windows 上使用 docker 设置 selenium 网格?

windows - git-bash $PATH 无法用空格解析 windows 目录

linux - Docker 无法使用代理连接到互联网

docker - 将文件从计算机移至容器Docker

php - 加载代理模块时,Docker 中的 Apache 2.4 httpd 不会启动

hibernate - 本地镜像构建过程在Quarkus中被卡住

git - 如何将所有提交从特定用户移动到新分支?

git - 如何撤消 git rm 。 -r --cached 命令而不丢失任何未提交的更改?

svn - 版本控制与自己协调

git - 在我的 Github 上显示协作存储库