添加除Dockerfile之外的项目文件夹

Nie*_* B. 6 ruby-on-rails docker

我试图在docker容器中运行一个小的Rails应用程序.我越来越近,但我正在努力使用我的Dockerfile.

我已将以下命令添加到我的Dockerfile中,以递归方式添加项目文件夹中的所有文件.

ADD .
Run Code Online (Sandbox Code Playgroud)

在此之后,我跑了

RUN bundle install --deployment
Run Code Online (Sandbox Code Playgroud)

但是,因为我的ADD命令还添加了Dockerfile,这意味着每次编辑Dockerfile时我的图像缓存都会中断,迫使我重新绑定.

根据https://docs.docker.com/reference/builder/#the-dockerignore-file,我可以使用一个.dockerignore文件来忽略Dockerfile,但这会导致docker build命令失败

2014/09/17 22:12:46 Dockerfile was excluded by .dockerignore pattern 'Dockerfile'
Run Code Online (Sandbox Code Playgroud)

如何轻松地将我的项目添加到我的图像,但排除Dockerfile,所以我不打破docker镜像缓存?

Kuh*_*ess 1

Github 上有一个问题:https ://github.com/docker/docker/issues/7969

\n\n

ADD您的主要问题是由于和 的修改而驱逐缓存Dockerfile。一位维护者解释说,目前该.dockerignore文件并不是为处理它而设计的:

\n\n
\n

当您将上下文从客户端上传到守护进程时,它 \xe2\x80\x94 .dockerignore \xe2\x80\x94 会跳过一些文件,并且守护进程需要 Dockerfile 来构建映像。所以 .dockerignore 的主要思想(目前)是跳过大目录以加快上下文上传速度,而不是清理上下文。Github 上的完整评论

\n
\n\n

我担心当你不修改这些行时ADD Dockerfile图像缓存会被破坏。

\n\n

也许处理缓存的一种方法是将要添加的所有文件放置在与以下目录不同的目录中Dockerfile

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Dockerfile\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 files_to_add/\n
Run Code Online (Sandbox Code Playgroud)\n\n

那么如果你这样做ADD files_to_addDockerfile将不会被包括在内,并且缓存也不会被驱逐。

\n\n

但是,我不认为这个技巧是一个解决方案。我还希望将我的Dockerfile旁边的其他文件放在我的项目的根目录中。

\n