Ale*_*lls 168 docker dockerfile docker-copy
在Dockerfile中,我有
COPY . .
Run Code Online (Sandbox Code Playgroud)
我想排除整个目录,在我的例子中,node_modules目录.
像这样的东西:
COPY [all but **/node_modules/**] .
Run Code Online (Sandbox Code Playgroud)
Docker可以实现吗?
小智 266
.dockerignore在docker build context目录中创建文件(所以在这种情况下,很可能是node_modules的父目录),其中包含一行:
.dockerignore
虽然你可能只想要:
.dockerignore
有关dockerignore的信息:https://docs.docker.com/engine/reference/builder/#dockerignore-file
小智 19
对于那些无法使用.dockerignore文件的用户(例如,如果您需要在一个COPY中使用该文件,而在另一个中则不需要):
是的,但是您需要多个COPY说明。具体来说,您需要为要排除的文件名中的每个字母提供一个COPY。
COPY [^n]* # All files that don't start with 'n'
COPY n[^o]* # All files that start with 'n', but not 'no'
COPY no[^d]* # All files that start with 'no', but not 'nod'
Run Code Online (Sandbox Code Playgroud)
继续直到您拥有完整的文件名或只有您有把握地确定没有其他文件的前缀为止。
kta*_*kta 15
从当前目录中排除node_modules
node_modules
Run Code Online (Sandbox Code Playgroud)
排除任何直接子目录中的node_modules
*/node_modules
Run Code Online (Sandbox Code Playgroud)
这是官方文档
mog*_*777 11
我使用了多阶段构建方法,因为我需要一个阶段才能访问文件,但不需要另一个阶段,因此 .dockerignore 不起作用:
FROM ruby AS builder
COPY app/ app/
# Do stuff with app
# remove the stuff you don't want
RUN rm -Rf app/assets
FROM ruby AS publish
# In my real version I needed the absolute path to builder WORKDIR.
# Since I'm copying from the builder stage, app/assets won't exist
# and neither will it be part of the publish image.
COPY --from=builder app app
Run Code Online (Sandbox Code Playgroud)
就我而言,我的Dockerfile包含一个安装步骤,该步骤生成vendor目录(与等效的PHP node_modules)。然后,我COPY将此目录转到最终的应用程序映像。因此,我不能把vendor我的.dockerignore。我的解决方案只是在执行之前删除目录composer install(相当于的PHP npm install)。
FROM composer AS composer
WORKDIR /app
COPY . .
RUN rm -rf composer.lock vendor \
&& composer install
FROM richarvey/nginx-php-fpm
WORKDIR /var/www/html
COPY --from=composer /app .
Run Code Online (Sandbox Code Playgroud)
此解决方案有效且不会使最终映像膨胀,但这并不理想,因为vendor在构建过程中主机上的目录被复制到Docker上下文中,这会增加时间。
对于 ONE LINER SOLUTION,在项目根目录的命令提示符或终端中键入以下内容。
echo node_modules >> .dockerignore
此命令在 .dockerignore 文件中附加“node_modules”。如果 .dockerignore 不存在,它将创建一个新的。将node_modules替换为要排除的文件夹。
警告: 如果您是 Docker 生态系统的新手和/或您的项目中已经有 .dockerignore 文件,请在继续之前进行备份。
奖励:(如乔伊·巴鲁克(Joey Baruch)所指出的)
(To CREATE/OVERWRITE the .dockerignore file via PowerShell, which can be handled by Docker):
>> echo node_modules | Out-File -Encoding UTF8 .dockerignore
Run Code Online (Sandbox Code Playgroud)
对于使用 gcloud build 的用户:
gcloud build忽略.dockerignore并寻找.gcloudignore
使用:
cp .dockerignore .gcloudignore
Run Code Online (Sandbox Code Playgroud)
添加 .dockerignore 对我有用。一个额外的点那些谁试图在Windows上的解决方案,Windows会不会让你创建.dockerignore文件(因为它在默认情况下允许创建文件开始没有。)
要创建这样的文件以 . 在 Windows 上, 还包括一个结束点,例如:.dockerignore.并按 Enter(前提是您已启用文件夹选项中的视图扩展选项)
| 归档时间: |
|
| 查看次数: |
74619 次 |
| 最近记录: |