Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

docker-compose gives ERROR: Cannot locate specified Dockerfile: Dockerfile

I've cloned a docker setup which uses docker-compose. One remote developer confirms it works so my problem seems to be with my setup.

I ran docker-compose up, but that currently gives me this:

$ 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

My docker-compose.yml looks like this:

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

and the tree looks like this:

$ 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

The thing I don't understand is that docker-compose seems to find all Dockerfiles, except for the one in the app folder. I've got the following installed on OSX 10.11.2:

  • Docker version 1.10.3, build 20f81dd
  • docker-compose version 1.6.2, build 4d72027

I'm just starting out with Docker and I'm kinda stuck here. Does anybody know what could possibly be wrong or how I can debug this? All tips are welcome!

[EDIT]
I forgot to mention that there is no hidden .dockerignore file:

$ 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

and the .gitignore file doesn't contain anything special either (don't know if it matters):

$ cat .gitignore
.project
.pydevproject
like image 703
kramer65 Avatar asked Mar 26 '16 14:03

kramer65


3 Answers

Here is how to specify dockerfile. Sorry I cannot do it in comments as formatting is not supported over there.

The dockerfile is searched into the defined build context, that is, you don't specify any path, just the filename of your Dockerfile.

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

app:
    build:
      context: app
      dockerfile: Dockerfile
like image 122
Xiongbing Jin Avatar answered Oct 21 '22 06:10

Xiongbing Jin


I had this problem on Windows with a docker-compose.yml created by a Visual Studio template. The template was created as:

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

And I was getting error: Cannot locate specified Dockerfile: <ProjectFolder>\Dockerfile. I changed the \ to / and it started working for me (i.e. <ProjectFolder>/Dockerfile). Maybe that will help if anyone has this error on Windows.

like image 39
crgolden Avatar answered Oct 21 '22 07:10

crgolden


Inside the docker-compose.yml file to do the change, in order to meet the Dockerfile:

app:
  build: ./app
like image 6
Dantez Layton Avatar answered Oct 21 '22 06:10

Dantez Layton