dockerfile可以放入.dockerignore吗?

时间:2017-11-30 18:29:19

标签: docker dockerfile

文档说它可以。

https://docs.docker.com/engine/reference/builder/

  

您甚至可以使用.dockerignore文件来排除Dockerfile和.dockerignore文件。这些文件仍然发送到守护程序,因为它需要它们来完成它的工作。但是ADD和COPY指令不会将它们复制到图像中。

但是当我把dockerfile放在.dockerignore中时,我得到了

Sending build context to Docker daemon  1.646MB
Error response from daemon: Cannot locate specified Dockerfile: Dockerfile

3 个答案:

答案 0 :(得分:6)

是的,你可以;你甚至可以将.dockerignore本身扔进那里!

您可能在其他方面做错了 - 可能在错误的目录中?

目录列表:

➜  ls -la
total 16
drwxr-xr-x  4 tj    wheel  128 Nov 30 13:42 .
drwxrwxrwt  7 root  wheel  224 Nov 30 13:42 ..
-rw-r--r--  1 tj    wheel   26 Nov 30 13:41 .dockerignore
-rw-r--r--  1 tj    wheel   28 Nov 30 13:42 Dockerfile

文件内容:

➜  cat .dockerignore
.dockerignore
Dockerfile

➜  test_docker_ignore cat Dockerfile
FROM ubuntu:16.04
ADD . .

构建一次;指定--no-cache为详细:

➜  docker build -t test --no-cache .
Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM ubuntu:16.04
 ---> 20c44cd7596f
Step 2/2 : ADD . .
 ---> 4d8ded297954
Successfully built 4d8ded297954
Successfully tagged test:latest

Dockerfile添加内容并重建: 构建将使用缓存,因为它忽略对Dockerfile

所做的更改
➜  echo "# A Test Comment" >> Dockerfile
➜  docker build -t test .
Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM ubuntu:16.04
 ---> 20c44cd7596f
Step 2/2 : ADD . .
 ---> Using cache
 ---> 4d8ded297954
Successfully built 4d8ded297954
Successfully tagged test:latest

答案 1 :(得分:2)

确保您运行的是当前版本的泊坞窗。较旧的版本不符合文档。此功能已添加到release 1.5

$ cat .dockerignore 
Dockerfile
.dockerignore

$ cat Dockerfile 
FROM busybox
COPY . /context
WORKDIR /context
CMD find .

$ docker build -t test-context .                               
Sending build context to Docker daemon  4.096kB
Step 1/4 : FROM busybox
 ---> 54511612f1c4
Step 2/4 : COPY . /context
 ---> bd941f5e9e18
Step 3/4 : WORKDIR /context
Removing intermediate container 47245e176bf4
 ---> c25ebcc95d95
Step 4/4 : CMD find .
 ---> Running in 6c1b05066c80
Removing intermediate container 6c1b05066c80
 ---> 6ee47079b59c
Successfully built 6ee47079b59c
Successfully tagged test-context:latest

$ docker run -it --rm test-context                             
.
./test-file2
./test-file1

$ docker version
Client:
 Version:      17.11.0-ce
 API version:  1.34
 Go version:   go1.8.3
 Git commit:   1caf76c
 Built:        Mon Nov 20 18:36:33 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.11.0-ce
 API version:  1.34 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   1caf76c
 Built:        Mon Nov 20 18:35:05 2017
 OS/Arch:      linux/amd64
 Experimental: true

答案 2 :(得分:2)

问题被编辑了一段时间,我没有注意到。原始问题更准确地反映了我所缺少的知识以及我遇到的问题,并且我已经恢复到该版本。

Docker将名称“dockerfile”和“Dockerfile”同等地视为一个点。即你可以称之为“dockerfile”,如果你做docker build -t blah .之类的话,docker仍会自动使用它。但是,如果您将dockerfile放在.dockerignore文件中,它就不知道如何自动构建您的图像了,您将获得

Error response from daemon: Cannot locate specified Dockerfile: Dockerfile