我想知道如何在 Dockerfile 中实现以下内容(不使用 .dockerignore):
COPY `git ls-tree -r HEAD --name-only` ./
Run Code Online (Sandbox Code Playgroud)
也就是说,仅复制在 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
Run Code Online (Sandbox Code Playgroud)
然后只需从存档文件构建您的 docker 镜像:
docker import myapp.tar.gz myapp:latest
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
993 次 |
| 最近记录: |