我在我的主机上创建了几个不同的目录,因为我试图学习Docker,只是为了让我的dockerfile有条理。我刚刚运行的Dockerfile是这样的:

FROM crystal/centos
MAINTAINER crystal

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

我的实际转速只有1gb。但是当我尝试执行sudo docker build -t="crystal/test" .时,我得到将构建上下文发送到docker守护进程3.5 GB。在您继续构建Docker映像的过程中,还有什么我不知道的吗?当我在主机上的其他目录中构建更多映像时,内存是否在不断积累?


当前回答

对于NodeJS应用程序,在根项目目录中添加一个.dockerignore文件,并在.dockerignore文件中添加以下内容

node_modules
dist

其他回答

Docker客户端将整个“构建上下文”发送给Docker守护进程。构建上下文(默认情况下)是Dockerfile所在的整个目录(即整个rpm树)。

你可以设置一个.dockerignore文件来让Docker忽略一些文件。你可能想尝试一下。

或者,您可以将rpm文件夹移动到Dockerfile上面一个目录级别,并且只进行符号链接测试。rpm到Dockerfile的目录。


你经常会想要把。git文件夹添加到。dockerignore文件夹中,这是导致评论中一些用户150MB -> 5GB差异的原因。

如果你有一个.dockerignore文件,构建上下文仍然很大,你可以使用Silver Searcher检查什么被发送到docker构建上下文:

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

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

更多评论请参见Github: https://github.com/moby/moby/issues/16056

我和FreeStyler有同样的问题。然而,我是从上下文上一个目录构建的。所以-f参数是正确的,上下文是不正确的。

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

从docker-dir建立以下是很好的

docker build -t br_base:0.1 . 

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

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

docker build -t br_base:0.1 ./base

这里的Context是由'./base'给出的

我通过移动Dockerfile和docker-compose来修复它。Yml到一个子文件夹,它工作得很好。显然,docker将当前文件夹发送到守护进程,我的文件夹是9gigs。

对于NodeJS应用程序,在根项目目录中添加一个.dockerignore文件,并在.dockerignore文件中添加以下内容

node_modules
dist