首页 文章

为docker图像构建上下文非常大

提问于
浏览
69

我在我的主机上创建了几个不同的目录,因为我试图了解Docker只是为了保持我的dockerfiles有条理 . 我刚刚运行的我的Dockerfile看起来像这样:

FROM crystal/centos
MAINTAINER crystal

ADD ./rpms/test.rpm ./rpms/ 
RUN yum -y --nogpgcheck localinstall /rpms/test.rpm

我的实际转速仅为1 GB . 但是当我尝试执行 sudo docker build -t="crystal/test" . 时,我会将构建上下文发送到Docker守护程序3.5 GB . 当你继续构建Docker镜像时,还有其他我不知道的东西吗?当我在主机上的其他目录中构建更多图像时,我的内存是否在累积?

5 回答

  • 10

    Docker客户端将整个"build context"发送到Docker守护程序 . 该构建上下文(默认情况下)是 Dockerfile 所在的整个目录(因此,整个 rpms 树) .

    您可以设置.dockerignore文件以使Docker忽略某些文件 . 您可能想要试验它 .

    或者,您可以将 rpms 文件夹移动到 Dockerfile 上方的一个目录级别,并将符号链接 test.rpm 移动到 Dockerfile 的目录中 .

  • 135

    我通过将我的Dockerfile和docker-compose.yml移动到子文件夹来修复它,它运行得很好 . 显然,docker将当前文件夹发送到守护进程,我的文件夹是9演出 .

  • 0

    在我的情况下,当我执行错误的 -f 参数 - 没有路径到位于Dockerfile的目录

    docker build --no-cache -t nginx5 -f /home/DF/Dockerfile /home/DF/ - 对

    docker build --no-cache -t nginx5 -f /home/DF/Dockerfile - 错了

  • 3

    如果您有一个 .dockerignore 文件并且构建上下文仍然很大,您可以使用The Silver Searcher检查发送到docker构建上下文的内容:

    ag --path-to-ignore .dockerignore --files-with-matches
    

    请注意,某些 ** 模式可能无法正常工作 .

    有关其他评论,请参阅此Github问题:https://github.com/moby/moby/issues/16056

  • 1

    我和FreeStyler有同样的问题 . 但是我是从我的上下文中的目录构建的 . 所以-f参数是正确的,上下文是不正确的 .

    project 
    |
    -------docker-dir
    

    从docker-dir建造以下是好的

    docker build -t br_base:0.1 .
    

    从dock-dir构建,构建上下文发生了变化 . 因此我需要更改命令中的上下文 . 上下文由' . '给出 . 在上面的命令中 .

    项目目录中的新命令应该是

    docker build -t br_base:0.1 ./base
    

    这里的上下文由'./base'给出

相关问题