docker - dockerignore 即使写得正确也不起作用
问题描述
我的 .dockerignore 文件
.gitlab-ci.yml
CHANGELOG
VERSION
README.md
我的 Dockerfile
FROM php:7.4-apache
#COPY SOURCE CODE
COPY . /var/www/html/
#INSTALL MYSQL EXTENSION
RUN docker-php-ext-install mysqli
我在构建阶段的 .gitlab-ci.yml
build image:
stage: build
rules:
- if: $CI_COMMIT_TAG
- if: $CI_OPEN_MERGE_REQUESTS
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: never
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
image: docker:latest
services:
- docker:dind
dependencies:
- generate tag
before_script:
- docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD"
script:
- docker build --compress -t "$DOCKER_USER"/"$DOCKER_IMAGE_NAME":"$TAG" .
- docker push "$DOCKER_USER"/"$DOCKER_IMAGE_NAME":"$TAG"
我的文件检查结果
$ ls
CHANGELOG
Dockerfile
README.md
VERSION
application
index.php
system
testci.sql
vendor
即使我遵循了https://docs.docker.com/engine/reference/builder/#dockerignore-file上的指南,为什么会发生这种情况?某些文件有例外吗?
解决方案
不,除了以 . 开头的行外,没有例外!
。.dockerignore
我的猜测是构建上下文的路径和根目录之间存在一些错误。要在这种情况下工作,所有内容都必须位于同一目录中。您可以通过添加额外的通配符来排除故障*
,例如 ( */*/CHANGELOG
)。
但是,将需要包含在构建上下文中的所有内容放在专用文件夹(例如docker
子目录)中可能会更简单、更安全。使用此设置,您不需要.dockerignore
(除了忽略Dockerfile
例如),并且您将避免无意中在图像中复制文件(在项目生命周期中添加且未正确忽略)。后果可能是更大的图像尺寸、不必要的重建、秘密曝光等。
推荐阅读
- php - PHP多线程 - 在线程之间同步缓存文件
- sql - 更新、插入或删除集合到表中
- c# - 如何在分组列表视图中使用不同的面板?
- swift - 我不知道为什么我的应用程序 ios 中有一个触摸指示器
- android - 如何滚动并消失一些视图,但也有一些视图
- azure-devops - 如何在 Azure DevOps 中查看与发布相关的工作项
- python - Cannot import numpy in pypy3 (installs fine with pip)
- javascript - 如何使用javascript在firebase中将在线用户的状态更改为离线用户
- sql - Sybase:从另一个存储过程中调用的存储过程太慢
- r - ggplot2中不同线型的图例条目