dockerfile可以放在.dockerignore中吗?

文件说,是的,它可以。

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 

是的你可以; 你甚至可以把.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 . . 

build造一次; 指定--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并重build:构build将使用caching,因为它会忽略对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 

确保你正在运行一个当前版本的docker。 旧版本将不符合文档。 该function在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 

这个问题编辑了一段时间,我没有注意到。 原来的问题更准确地反映了我错过的知识和我所遇到的问题,并且已经回到了那个版本。

Docker将名字“dockerfile”和“Dockerfile”同等对待。 即你可以把它叫做“dockerfile”,如果你做了像docker build -t blah .东西,docker仍然会自动使用它docker build -t blah . 。 但是,如果你然后把dockerfile放在.dockerignore文件中,它不知道如何自动构build你的图像,你会得到

Error response from daemon: Cannot locate specified Dockerfile: Dockerfile