文档说它可以。
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
答案 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