提问者:小点点

如何添加除隐藏目录以外的所有文件/目录,如。Dockerfile中的git


当我们构建Docker映像时,我们经常做的一件事是将所有源代码打包在Dockerfile中。

ADD . /app

我们如何避免包含。git目录的简单方式?

我使用ADD[^.]*/应用程序/

完整样本:

docker@boot2docker:/mnt/sda1/tmp/abc$ find .
.
./c
./.git
./Dockerfile
./good
./good/a1
docker@boot2docker:/mnt/sda1/tmp/abc$ cat Dockerfile
FROM ubuntu

ADD [^.]* /app/
docker@boot2docker:/mnt/sda1/tmp/abc$ docker build -t abc .
Sending build context to Docker daemon 4.096 kB
Sending build context to Docker daemon
Step 0 : FROM ubuntu
 ---> 04c5d3b7b065
Step 1 : ADD [^.]* /app/
d ---> 5d67603f108b
Removing intermediate container 60159dee6ac8
Successfully built 5d67603f108b
docker@boot2docker:/mnt/sda1/tmp/abc$ docker run -it abc
root@1b1705dd66a2:/# ls -l app
total 4
-rw-r--r-- 1 1000 staff 30 Jan 22 01:18 Dockerfile
-rw-r--r-- 1 root root   0 Jan 22 01:03 a1
-rw-r--r-- 1 root root   0 Jan 22 00:10 c

其次,它将失去目录结构,因为good\a1被更改为a1

Docker中的相关源代码https://github.com/docker/docker/blob/eaecf741f0e00a09782d5bcf16159cc8ea258b67/builder/internals.go#L115


共3个答案

匿名用户

您可以在的帮助下排除不需要的文件。dockerignore文件

匿名用户

我们怎样才能避免包括这些问题。git目录的简单方式?

只需创建一个名为的文件。dockerignore位于根上下文文件夹中,具有以下行

**/.git
**/node_modules

有了这些行,Docker将排除目录。git节点_模块来自包括根目录在内的任何子目录。Docker还支持一个特殊的通配符字符串**,它匹配任意数量的目录(包括零)。

其次,它将丢失目录结构,因为good\a1被更改为a1

有了. docker忽略它不会

$ docker run -it --rm sample tree /opt/
/opt/
├── Dockerfile
├── c
│   └── no_sslv2.patch
└── good
    └── a1
        └── README

3 directories, 3 files

参考官方文件:。dockerignore

匿名用户

在根目录中添加. docker忽略文件(语法类似于. gitignore文件)