docker-compose给出了ERROR:找不到指定的Dockerfile:Dockerfile

时间:2016-03-26 14:31:18

标签: docker docker-compose

我克隆了一个使用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

13 个答案:

答案 0 :(得分:23)

以下是如何指定dockerfile。抱歉,我不能在评论中这样做,因为那里不支持格式化。

https://docs.docker.com/compose/compose-file/#context

app:
    build:
      context: app
      dockerfile: Dockerfile

答案 1 :(得分:6)

我在Windows上使用由Visual Studio模板创建的docker-compose.yml遇到了此问题。模板创建为:

build:
  context: .
  dockerfile: <ProjectFolder>\Dockerfile

我得到了错误:Cannot locate specified Dockerfile: <ProjectFolder>\Dockerfile。我将\更改为/,它开始为我工作(即<ProjectFolder>/Dockerfile)。如果有人在Windows上出现此错误,也许会有所帮助。

答案 2 :(得分:2)

在docker-compose.yml文件内部进行更改,以满足Dockerfile:

app:
  build: ./app

答案 3 :(得分:2)

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

答案 4 :(得分:1)

您期望Dockerfile的path吗?您可以使用--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

答案 5 :(得分:1)

您需要正确指定docker文件名,并且区分大小写。我在DockerFile中有大写字母,因此找不到它们。希望它能帮助像我一样挣扎的人。最好在docker compose文件中使用dockerfile属性。

app:
    build:
      dockerfile: DockerFile

答案 6 :(得分:1)

    "use strict"
    const mysql = require("mysql");

    class DB {
      constructor() {
        this.conn = mysql.createConnection({
          host: 'localhost',enter code here
          user: 'root',
          password: 'pass',
          database: 'db_name'
        });
      }

      connect() {
        this.conn.connect(function (err) {
          if (err) {
            console.error("error connecting: " + err.stack);
            return;
          }
          console.log("connected to DBB");
        });
      }

      checkQuery(id) { 

        try {
          this.conn.query(`SELECT * FROM tablename WHERE id = ${id}`, function (err, result) {
            if (err) {
              console.log('err');
              throw err;
            } else {
              console.log(result);

            }
          });
        } catch (e) {
          console.log('Exception caught in checkQuery()', e)
        }
      }

module.exports = DB
var obj = new DB();
obj.checkQuery(2);

这可能对版本“ 3.8”有所帮助 为当前目录设置 否则,必须指定dockerfile绝对路径,例如

  build: 
          context: ./
          dockerfile: DockerFile

答案 7 :(得分:1)

尝试了几种变体,出于某些未知的原因,我不得不使用绝对路径使其起作用

├── 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: ../

答案 8 :(得分:0)

就我而言,这是git上的错误分支。如果您从远程上下文构建映像,请不要忘记设置特定的分支。用于上下文的网址应如下所示:

services:                                                                                                                                                                                                 
wss-home:                                                                                                                                                                                               
  build:                                                                                                                                                                                                
  context: "http://${LOGIN}:${PASSWD}@host/path/to/repository.git#branch_name"                                                                                                        
  dockerfile: Dockerfile.prod

答案 9 :(得分:0)

错误的路径, 当dockerfile和在同一位置撰写时,我在linux ubuntu上的最短方法

build: ./

答案 10 :(得分:0)

我遇到了这个错误,因为我的 docker-compose 位于子目录中。我没有意识到的是在 docker-compose 文件中:

  • 您指定的构建上下文与 docker-compose 文件所在的位置相关(在正确的第一个屏幕截图中,构建上下文从 docker compose 文件位置向上移动了两个目录,位于存储库的底部)
  • 您指定的 dockerfile 位置与构建上下文的设置位置相关(在正确的第一个屏幕截图中,我需要向下进入两个目录,进入 service/deploy,以找到 Dockerfile,因为我只是将上下文设置为两个目录)

enter image description here

我之前所做的导致错误:“无法找到指定的 Dockerfile”:

enter image description here

我希望这能帮助别人!

答案 11 :(得分:-1)

我在ubuntu vm上也遇到了同样的问题。 我执行了以下步骤:

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

我希望这能解决此问题。

答案 12 :(得分:-1)

构建:
上下文:./
dockerfile: DockerFile

只需添加

构建:
上下文:./
dockerfile: DockerFile.dockerfile