.dockerignore中的例外情况

tid*_*all 5 docker

如何.dockerignore处理异常?

例如,我想忽略src/目录中的所有内容,除了src/web/public.

我试过了...

.git
src
!src/web/public
Run Code Online (Sandbox Code Playgroud)

似乎不起作用.

docker build .显示Sending build context to Docker daemon 20.63 MB两种方式.

Ger*_*oth 16

只是想添加以防其他人遇到这个问题,在.dockerignore文件中支持docker 1.7.0排除.所以问题中的例子!src/web/public确实有效

https://docs.docker.com/engine/reference/builder/#dockerignore-file


Mau*_*hez 5

使用我对另一个问题的回答/sf/answers/3600089671/,您可以使用以下.dockerignore文件:

# Ignore everything
**

# Allow /src/web/public directory
!/src/web/public/**

# You can also ignore unnecessary files inside the /src/web/public to make your image even smaller.
**/*~
**/*.log
**/.DS_Store
**/Thumbs.db
Run Code Online (Sandbox Code Playgroud)


And*_*ndy 3

似乎没有.dockerignore处理异常。如果有一个众所周知的语法,您可以提出更改并提出拉取请求

commands.go的标签1.3中我们看到:

    ignore, err := ioutil.ReadFile(path.Join(root, ".dockerignore"))
    // ...
    options := &archive.TarOptions{
        Compression: archive.Uncompressed,
        Excludes:    excludes,
    }
    context, err = archive.TarWithOptions(root, options)
Run Code Online (Sandbox Code Playgroud)

在archive.go中:

    for _, include := range options.Includes {

            // ...
            skip, err := fileutils.Matches(relFilePath, options.Excludes)
            if err != nil {
                log.Debugf("Error matching %s", relFilePath, err)
                return err
            }

            if skip {
                if f.IsDir() {
                    return filepath.SkipDir
                }
                return nil
            }
            // ...
    }
Run Code Online (Sandbox Code Playgroud)