65

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

ADD . /app

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

我尝试了使用 Unix 的方式来处理这个问题ADD [^.]* /app/

完整样本:

docker@boot2docker:/mnt/sda1/tmp/abc$ 查找。
.
。/C
./.git
./Dockerfile
。/好的
./好/a1
docker@boot2docker:/mnt/sda1/tmp/abc$ cat Dockerfile
来自 Ubuntu

添加 [^.]* /app/
docker@boot2docker:/mnt/sda1/tmp/abc$ docker build -t abc 。
将构建上下文发送到 Docker 守护进程 4.096 kB
将构建上下文发送到 Docker 守护进程
步骤 0:来自 ubuntu
 ---> 04c5d3b7b065
第 1 步:添加 [^.]* /app/
d ---> 5d67603f108b
卸下中间容器 60159dee6ac8
成功建造 5d67603f108b
docker@boot2docker:/mnt/sda1/tmp/abc$ docker run -it abc
root@1b1705dd66a2:/# ls -l app
共 4 个
-rw-r--r-- 1 1000 名员工 30 Jan 22 01:18 Dockerfile
-rw-r--r-- 1 根 0 Jan 22 01:03 a1
-rw-r--r-- 1 根根 0 Jan 22 00:10 c

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

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

4

3 回答 3

85

您可以借助.dockerignore 文件排除不需要的文件

于 2015-01-22T07:39:45.903 回答
38

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

.dockerignore只需使用以下行在根上下文文件夹中创建一个名为的文件

**/.git
**/node_modules

使用这样的行,Docker 将排除目录.gitnode_modules任何子目录,包括根目录。Docker 还支持与任意数量的目录(包括零)匹配的特殊通配符字符串**

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

使用 .dockerignore 它不会

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

3 directories, 3 files

参考官方文档:.dockerignore

于 2017-07-01T18:23:49.663 回答
0

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

于 2018-01-05T08:32:36.507 回答