Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

.dockerignore matching ignores filename case on Linux

Đang mở Phù hợp với người mới
#3,450 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 4 ngày

@locker95 đang làm issue này rồi.

Từ ngày 8/10/2026.

  • #3451 của @locker95 — đang mở

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
82/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
docker, python
Lĩnh vực
build-system

Hướng nghiên cứu

Bắt đầu từ docker.utils.tar và mã pattern-matching mà nó gọi (docker/utils/build.py, các helper exclude) để xem vì sao README.md cũng khớp với readme.md trên Linux trong khi BuildKit vẫn giữ nó. Script reproduce-case.py của issue cung cấp cách kiểm chứng hành vi không cần daemon; hãy điều chỉnh nó thành một test bên cạnh các test build/tar hiện có trong tests/unit/utils_test.py. Xong nghĩa là loại trừ phân biệt chữ hoa chữ thường trên Linux, với reproducer cho thấy readme.md được giữ lại.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

🤖 this issue description was generated by an LLM. i reviewed it before submitting. 🤖


I used Codex for the investigation, reproduction scripts, and this draft.

When I generate a build context with docker.utils.tar, the pattern README.md removes both README.md and readme.md on Linux. Docker's BuildKit keeps readme.md with the same input. The SDK therefore removes a file that the Dockerfile could otherwise copy.

Reproduction

Save this script as reproduce-case.py:

import tarfile
from pathlib import Path
from tempfile import TemporaryDirectory

import docker
from docker.utils import tar

patterns = ['README.md']
files = ['README.md', 'readme.md']
with TemporaryDirectory() as directory:
    root = Path(directory)
    (root / 'Dockerfile').write_text('FROM scratch\nCOPY . /\n')
    (root / '.dockerignore').write_text('\n'.join(patterns) + '\n')
    for relative in files:
        path = root / relative
        path.parent.mkdir(parents=True, exist_ok=True)
        path.write_text(relative)
    with tar(str(root), exclude=patterns.copy()) as context:
        with tarfile.open(fileobj=context) as archive:
            actual = sorted(name for name in archive.getnames() if name in files)
    print('docker:', docker.__version__)
    print('patterns:', patterns)
    print('SDK context files:', actual)

I ran it in an isolated uv environment, using commit 56343ddf8f0c44281e151c2dad016c16cdb8393d:

uv run --isolated --no-project --no-config --no-cache \
  --python /home/jyn/.local/share/mise/installs/python/3.14.7/bin/python3 \
  --with 'docker @ git+https://github.com/docker/docker-py@56343ddf8f0c44281e151c2dad016c16cdb8393d' \
  python reproduce-case.py

The --python path selects my tested Python installation; use the path to your Python executable on another machine. The pinned requirement selects the upstream SDK rather than an installed copy. I did not modify the SDK or replace its modules with mocks. This reproducer creates disposable files and examines the SDK's context tar without contacting a Docker daemon.

Expected behavior

The SDK should exclude README.md and retain readme.md on Linux. I built the same two files with FROM scratch and COPY . / using BuildKit, and its local output retained readme.md.

Actual output

docker: 7.2.1.dev26+g56343ddf8
patterns: ['README.md']
SDK context files: []

BuildKit control

I ran the following standalone control with Docker's active lima context and lima builder. It creates the same input files, runs docker buildx build with a local filesystem export, and enumerates every exported regular file before removing the temporary directories. The command uses the active Docker context and builder; another machine can use its own working configuration.

Buildx command and exported-file inspection

Save this script as buildkit-control-case.py:

import subprocess
from pathlib import Path
from tempfile import TemporaryDirectory

patterns = ['README.md']
files = ['README.md', 'readme.md']
with TemporaryDirectory() as directory:
    context = Path(directory) / 'input'
    context.mkdir()
    output = Path(directory) / 'output'
    (context / 'Dockerfile').write_text('FROM scratch\nCOPY . /\n')
    (context / '.dockerignore').write_text('\n'.join(patterns) + '\n')
    for relative in files:
        path = context / relative
        path.parent.mkdir(parents=True, exist_ok=True)
        path.write_text(relative)
    subprocess.run([
        'docker', 'buildx', 'build',
        '--progress=plain', '--provenance=false',
        '--output', f'type=local,dest={output}', str(context),
    ], check=True)
    print('BuildKit output files:', sorted(
        path.relative_to(output).as_posix()
        for path in output.rglob('*') if path.is_file()
    ))

Run it with:

python3 buildkit-control-case.py

I got this stdout; Buildx wrote its progress log to stderr and exited successfully:

BuildKit output files: ['.dockerignore', 'Dockerfile', 'readme.md']

Environment

  • Docker SDK for Python: 7.2.1.dev26+g56343ddf8, using upstream commit 56343ddf8f0c44281e151c2dad016c16cdb8393d.
  • Python: 3.14.7 (main, Sep 29 2026, 15:01:40) [Clang 22.1.3 ].
  • OS/distribution: CachyOS Linux, rolling release (BUILD_ID=rolling; /etc/os-release does not define VERSION_ID).
  • Kernel/platform: Linux-7.2.9-1-cachyos-x86_64-with-glibc2.44.
  • Docker CLI: 29.8.2; Docker Engine: 29.8.0 (linux/amd64).
  • Buildx: github.com/docker/buildx 0.37.2 2d379c0c3f22da0d2759d132a0ec81ca949098f0.
  • The SDK tar reproducer requires no engine connection; the separate BuildKit comparison used the versions above.
Ngôn ngữ chính
Python
Star
7.2k
Fork
1.7k
Merge trung bình
3 ngày 19 giờ
Pull request đã merge (30 ngày)
1

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của docker/docker-py

Tất cả issue của docker/docker-py

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.