docker-compose gives ERROR: Cannot locate specified Dockerfile: Dockerfile
docker-compose gives ERROR: Cannot locate specified Dockerfile: Dockerfile
我克隆了一个使用 docker-compose 的 docker 设置。一位远程开发人员确认它有效,所以我的问题似乎出在我的设置上。
我 运行 docker-compose up
,但目前给我的是:
$ docker-compose up
Creating volume "mycompanydocker_mysql-data" with local driver
Creating volume "mycompanydocker_redis-data" with local driver
Creating volume "mycompanydocker_app-data" with local driver
Creating volume "mycompanydocker_mongo-data" with local driver
mycompanydocker_redis_1 is up-to-date
mycompanydocker_mongo_1 is up-to-date
mycompanydocker_mysql_1 is up-to-date
Building app
ERROR: Cannot locate specified Dockerfile: Dockerfile
我的 docker-compose.yml
看起来像这样:
version: '2'
services:
mysql:
build: mysql/.
env_file: env
expose:
- 3306
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
mongo:
build: mongo/.
env_file: env
expose:
- 27017
ports:
- "27017:27017"
volumes:
- mongo-data:/data/db
redis:
build: redis/.
env_file: env
expose:
- 6379
ports:
- "6379:6379"
volumes:
- redis-data:/data
app:
build: app/.
env_file: env
expose:
- 80
ports:
- "80:80"
volumes:
# To mount a local directory, change this
# To use a docker volume
- app-data:/app
# local app
# - ./mycompany:/app
depends_on:
- mysql
- mongo
- redis
volumes:
app-data:
driver: local
mysql-data:
driver: local
redis-data:
driver: local
mongo-data:
driver: local
树看起来像这样:
$ tree
.
├── README.rst
├── app
│ ├── Dockerfile
│ ├── bin
│ │ ├── setup.sh
│ │ ├── start-nginx.sh
│ │ ├── start-rqworker.sh
│ │ ├── start.sh
│ │ └── update.sh
│ ├── etc
│ │ ├── nginx
│ │ │ └── sites-available
│ │ │ └── app
│ │ ├── supervisor
│ │ │ └── conf.d
│ │ │ └── supervisord.conf
│ │ └── supervisord.conf
│ └── ssh
│ └── id_rsa
├── docker-compose.yml
├── env
├── mongo
│ └── Dockerfile
├── mysql
│ └── Dockerfile
└── redis
└── Dockerfile
我不明白的是 docker-compose
似乎找到了所有 Dockerfile
,除了 app
文件夹中的那个。我在 OSX 10.11.2 上安装了以下软件:
Docker version 1.10.3, build 20f81dd
docker-compose version 1.6.2, build 4d72027
我刚开始使用 Docker,有点卡在这里了。有谁知道可能出什么问题或我如何调试它?欢迎所有提示!
[编辑]
我忘了说没有隐藏的 .dockerignore
文件:
$ ls -la
total 56
drwx------@ 11 kramer staff 374 25 mrt 14:13 .
drwx------+ 1134 kramer staff 38556 26 mrt 17:27 ..
-rw-r--r--@ 1 kramer staff 8196 26 mrt 08:14 .DS_Store
-rw-r--r--@ 1 kramer staff 23 24 mrt 15:29 .gitignore
-rw-r--r--@ 1 kramer staff 3879 24 mrt 15:29 README.rst
drwxr-xr-x@ 7 kramer staff 238 25 mrt 14:26 app
-rw-r--r--@ 1 kramer staff 868 25 mrt 17:50 docker-compose.yml
-rw-r--r--@ 1 kramer staff 219 24 mrt 15:29 env
drwxr-xr-x@ 3 kramer staff 102 24 mrt 15:29 mongo
drwxr-xr-x@ 3 kramer staff 102 24 mrt 15:29 mysql
drwxr-xr-x@ 3 kramer staff 102 24 mrt 15:29 redis
并且 .gitignore
文件也不包含任何特殊内容(不知道是否重要):
$ cat .gitignore
.project
.pydevproject
这里是如何指定dockerfile。对不起,我不能在评论中这样做,因为那里不支持格式化。
https://docs.docker.com/compose/compose-file/#context
app:
build:
context: app
dockerfile: Dockerfile
path
是您期望 Dockerfile 的位置吗?您可以使用 --verbose
标志进行检查,例如:
docker-compose --verbose up | grep compose.cli.verbose_proxy.proxy_callable | grep path
例如:
compose.cli.verbose_proxy.proxy_callable: docker build <-
(pull=False, cache_from=None, stream=True, nocache=False, labels=None,
tag='your_app',
buildargs={'some_build': '1901', 'addr': '0.0.0.0', 'corsdomain': '*',
'rpcport': '8545'}, forcerm=False, rm=True,
path='/Users/jmunsch/Desktop/dev/your_app/app?', # in the verbose output
dockerfile='Dockerfile')
在 Dockerfile 中定义 ARGS:
ARG some_flag=
ARG some_build=1900
ARG addr=0.0.0.0
ARG corsdomain="*"
ARG rpcport=8545
并在像这样的撰写文件中:
build:
context: ./your_app
dockerfile: Dockerfile
args:
some_flag: # --some_flag
some_build: 1901 # --some_build 1901
rpcaddr: 0.0.0.0 # --rpcaddr 0.0.0.0
rpcport: 8545 # --rpcport 8545
corsdomain: "*" # --corsdomain
我在 Windows 上用 Visual Studio 模板创建的 docker-compose.yml
遇到了这个问题。模板创建为:
build:
context: .
dockerfile: <ProjectFolder>\Dockerfile
我收到错误:Cannot locate specified Dockerfile: <ProjectFolder>\Dockerfile
。我将 \
更改为 /
,它开始为我工作(即 <ProjectFolder>/Dockerfile
)。如果有人在 Windows.
上遇到此错误,这可能会有所帮助
在docker-compose.yml
文件里面做改动,以满足Dockerfile:
app:
build: ./app
您需要正确指定 docker 文件名,并且区分大小写。我在 DockerFile 中有大写字母,所以找不到它们。希望它能帮助像我一样挣扎的人。最好在 docker 撰写文件中使用 dockerfile 属性。
app:
build:
dockerfile: DockerFile
在我的例子中,它是 git 上的错误分支。如果您从远程上下文构建图像,请不要忘记设置特定分支。 Url 上下文应如下所示:
services:
wss-home:
build:
context: "http://${LOGIN}:${PASSWD}@host/path/to/repository.git#branch_name"
dockerfile: Dockerfile.prod
我在 ubuntu 虚拟机上遇到过同样的问题。
我执行了以下步骤:
sudo apt-get remove docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
我希望这会解决这个问题。
Visual Studio 自动创建的 docker-compose 文件遇到了这个问题并尝试了@crgolden 解决方案,但它没有用。
我只在 运行 之后:
1) Renaming the file VS created from DockerFile to Dockerfile (notice the lower case 'f')
2) change the config to this:
services:
...
<image-name>:
build:
context: <project_name>
dockerfile: Dockerfile
build:
context: ./
dockerfile: DockerFile
这可能有助于版本:'3.8'
为当前目录设置
否则,必须指定 dockerfile 绝对路径,如
build:
context: .
dockerfile: <project_directory>\DockerFile
尝试了几种变体,出于某种未知原因,我不得不使用绝对路径才能正常工作
├── visit-count
| ├── docker-compose.yml
│ ├── Dockerfile
│ ├── files
│ │ ├── index.js
│ │ ├── package.json
version: '3.5'
services:
visit-count:
build:
context: /Users/deltapeng/source/repos/visit-count/files/
dockerfile: /Users/deltapeng/source/repos/visit-count/Dockerfile
但是在我上面的工作之后,发现这个相对路径也可以工作。
version: '3.5'
services:
visit-count:
build:
context: ./files/
dockerfile: ../
错误的路径,
我在 linux ubuntu 上的最短路径,当 dockerfile 和 compose 在同一位置时
build: ./
构建:
上下文:./
dockerfile: DockerFile
只需添加
构建:
上下文:./
码头文件:DockerFile.dockerfile
我 运行 进入此错误是因为我的 docker-compose 位于子目录中。我没有意识到的是,在 docker-compose 文件中:
- 您指定的构建上下文相对于 docker-compose 文件所在的位置(在正确的第一个屏幕截图中,构建上下文从 docker 撰写文件位置向上移动两个目录,在存储库的底部)
- 您指定的 docker 文件位置是相对于设置构建上下文的位置(在正确的第一个屏幕截图中,我需要进入两个目录,进入 service/deploy,找到 Dockerfile因为我只是将上下文设置为两个目录)
我之前的操作导致错误:“找不到指定的 Dockerfile”:
希望对大家有所帮助!
我克隆了一个使用 docker-compose 的 docker 设置。一位远程开发人员确认它有效,所以我的问题似乎出在我的设置上。
我 运行 docker-compose up
,但目前给我的是:
$ docker-compose up
Creating volume "mycompanydocker_mysql-data" with local driver
Creating volume "mycompanydocker_redis-data" with local driver
Creating volume "mycompanydocker_app-data" with local driver
Creating volume "mycompanydocker_mongo-data" with local driver
mycompanydocker_redis_1 is up-to-date
mycompanydocker_mongo_1 is up-to-date
mycompanydocker_mysql_1 is up-to-date
Building app
ERROR: Cannot locate specified Dockerfile: Dockerfile
我的 docker-compose.yml
看起来像这样:
version: '2'
services:
mysql:
build: mysql/.
env_file: env
expose:
- 3306
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
mongo:
build: mongo/.
env_file: env
expose:
- 27017
ports:
- "27017:27017"
volumes:
- mongo-data:/data/db
redis:
build: redis/.
env_file: env
expose:
- 6379
ports:
- "6379:6379"
volumes:
- redis-data:/data
app:
build: app/.
env_file: env
expose:
- 80
ports:
- "80:80"
volumes:
# To mount a local directory, change this
# To use a docker volume
- app-data:/app
# local app
# - ./mycompany:/app
depends_on:
- mysql
- mongo
- redis
volumes:
app-data:
driver: local
mysql-data:
driver: local
redis-data:
driver: local
mongo-data:
driver: local
树看起来像这样:
$ tree
.
├── README.rst
├── app
│ ├── Dockerfile
│ ├── bin
│ │ ├── setup.sh
│ │ ├── start-nginx.sh
│ │ ├── start-rqworker.sh
│ │ ├── start.sh
│ │ └── update.sh
│ ├── etc
│ │ ├── nginx
│ │ │ └── sites-available
│ │ │ └── app
│ │ ├── supervisor
│ │ │ └── conf.d
│ │ │ └── supervisord.conf
│ │ └── supervisord.conf
│ └── ssh
│ └── id_rsa
├── docker-compose.yml
├── env
├── mongo
│ └── Dockerfile
├── mysql
│ └── Dockerfile
└── redis
└── Dockerfile
我不明白的是 docker-compose
似乎找到了所有 Dockerfile
,除了 app
文件夹中的那个。我在 OSX 10.11.2 上安装了以下软件:
Docker version 1.10.3, build 20f81dd
docker-compose version 1.6.2, build 4d72027
我刚开始使用 Docker,有点卡在这里了。有谁知道可能出什么问题或我如何调试它?欢迎所有提示!
[编辑]
我忘了说没有隐藏的 .dockerignore
文件:
$ ls -la
total 56
drwx------@ 11 kramer staff 374 25 mrt 14:13 .
drwx------+ 1134 kramer staff 38556 26 mrt 17:27 ..
-rw-r--r--@ 1 kramer staff 8196 26 mrt 08:14 .DS_Store
-rw-r--r--@ 1 kramer staff 23 24 mrt 15:29 .gitignore
-rw-r--r--@ 1 kramer staff 3879 24 mrt 15:29 README.rst
drwxr-xr-x@ 7 kramer staff 238 25 mrt 14:26 app
-rw-r--r--@ 1 kramer staff 868 25 mrt 17:50 docker-compose.yml
-rw-r--r--@ 1 kramer staff 219 24 mrt 15:29 env
drwxr-xr-x@ 3 kramer staff 102 24 mrt 15:29 mongo
drwxr-xr-x@ 3 kramer staff 102 24 mrt 15:29 mysql
drwxr-xr-x@ 3 kramer staff 102 24 mrt 15:29 redis
并且 .gitignore
文件也不包含任何特殊内容(不知道是否重要):
$ cat .gitignore
.project
.pydevproject
这里是如何指定dockerfile。对不起,我不能在评论中这样做,因为那里不支持格式化。
https://docs.docker.com/compose/compose-file/#context
app:
build:
context: app
dockerfile: Dockerfile
path
是您期望 Dockerfile 的位置吗?您可以使用 --verbose
标志进行检查,例如:
docker-compose --verbose up | grep compose.cli.verbose_proxy.proxy_callable | grep path
例如:
compose.cli.verbose_proxy.proxy_callable: docker build <-
(pull=False, cache_from=None, stream=True, nocache=False, labels=None,
tag='your_app',
buildargs={'some_build': '1901', 'addr': '0.0.0.0', 'corsdomain': '*',
'rpcport': '8545'}, forcerm=False, rm=True,
path='/Users/jmunsch/Desktop/dev/your_app/app?', # in the verbose output
dockerfile='Dockerfile')
在 Dockerfile 中定义 ARGS:
ARG some_flag=
ARG some_build=1900
ARG addr=0.0.0.0
ARG corsdomain="*"
ARG rpcport=8545
并在像这样的撰写文件中:
build:
context: ./your_app
dockerfile: Dockerfile
args:
some_flag: # --some_flag
some_build: 1901 # --some_build 1901
rpcaddr: 0.0.0.0 # --rpcaddr 0.0.0.0
rpcport: 8545 # --rpcport 8545
corsdomain: "*" # --corsdomain
我在 Windows 上用 Visual Studio 模板创建的 docker-compose.yml
遇到了这个问题。模板创建为:
build:
context: .
dockerfile: <ProjectFolder>\Dockerfile
我收到错误:Cannot locate specified Dockerfile: <ProjectFolder>\Dockerfile
。我将 \
更改为 /
,它开始为我工作(即 <ProjectFolder>/Dockerfile
)。如果有人在 Windows.
在docker-compose.yml
文件里面做改动,以满足Dockerfile:
app:
build: ./app
您需要正确指定 docker 文件名,并且区分大小写。我在 DockerFile 中有大写字母,所以找不到它们。希望它能帮助像我一样挣扎的人。最好在 docker 撰写文件中使用 dockerfile 属性。
app:
build:
dockerfile: DockerFile
在我的例子中,它是 git 上的错误分支。如果您从远程上下文构建图像,请不要忘记设置特定分支。 Url 上下文应如下所示:
services:
wss-home:
build:
context: "http://${LOGIN}:${PASSWD}@host/path/to/repository.git#branch_name"
dockerfile: Dockerfile.prod
我在 ubuntu 虚拟机上遇到过同样的问题。 我执行了以下步骤:
sudo apt-get remove docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
我希望这会解决这个问题。
Visual Studio 自动创建的 docker-compose 文件遇到了这个问题并尝试了@crgolden 解决方案,但它没有用。
我只在 运行 之后:
1) Renaming the file VS created from DockerFile to Dockerfile (notice the lower case 'f')
2) change the config to this:
services:
...
<image-name>:
build:
context: <project_name>
dockerfile: Dockerfile
build:
context: ./
dockerfile: DockerFile
这可能有助于版本:'3.8' 为当前目录设置 否则,必须指定 dockerfile 绝对路径,如
build:
context: .
dockerfile: <project_directory>\DockerFile
尝试了几种变体,出于某种未知原因,我不得不使用绝对路径才能正常工作
├── visit-count
| ├── docker-compose.yml
│ ├── Dockerfile
│ ├── files
│ │ ├── index.js
│ │ ├── package.json
version: '3.5'
services:
visit-count:
build:
context: /Users/deltapeng/source/repos/visit-count/files/
dockerfile: /Users/deltapeng/source/repos/visit-count/Dockerfile
但是在我上面的工作之后,发现这个相对路径也可以工作。
version: '3.5'
services:
visit-count:
build:
context: ./files/
dockerfile: ../
错误的路径, 我在 linux ubuntu 上的最短路径,当 dockerfile 和 compose 在同一位置时
build: ./
构建:
上下文:./
dockerfile: DockerFile
只需添加
构建:
上下文:./
码头文件:DockerFile.dockerfile
我 运行 进入此错误是因为我的 docker-compose 位于子目录中。我没有意识到的是,在 docker-compose 文件中:
- 您指定的构建上下文相对于 docker-compose 文件所在的位置(在正确的第一个屏幕截图中,构建上下文从 docker 撰写文件位置向上移动两个目录,在存储库的底部)
- 您指定的 docker 文件位置是相对于设置构建上下文的位置(在正确的第一个屏幕截图中,我需要进入两个目录,进入 service/deploy,找到 Dockerfile因为我只是将上下文设置为两个目录)
我之前的操作导致错误:“找不到指定的 Dockerfile”:
希望对大家有所帮助!