web-dev-qa-db-fra.com

docker-compose donne ERROR: impossible de localiser le fichier Dockerfile spécifié: Dockerfile

J'ai cloné une configuration de menu fixe qui utilise la composition de menu fixe. Un développeur à distance confirme que cela fonctionne, alors mon problème semble être lié à ma configuration. 

J'ai exécuté docker-compose up, mais cela me donne actuellement ceci:

$ 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

Mon docker-compose.yml ressemble à ceci:

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

et l'arbre ressemble à ceci:

$ 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

Ce que je ne comprends pas, c'est que docker-compose semble trouver toutes les Dockerfiles, à l'exception de celle du dossier app. Les éléments suivants sont installés sur OSX 10.11.2:

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

Je viens juste de commencer avec Docker et je suis un peu coincé ici. Est-ce que quelqu'un sait ce qui pourrait éventuellement être faux ou comment je peux résoudre ce problème? Tous les conseils sont les bienvenus!

[EDIT] J'ai oublié de mentionner qu'il n'y a pas de fichier caché .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

et le fichier .gitignore ne contient rien de spécial non plus (je ne sais pas si c'est important):

$ cat .gitignore
.project
.pydevproject
25
kramer65

Voici comment spécifier dockerfile. Désolé, je ne peux pas le faire dans les commentaires car le formatage n'est pas pris en charge là-bas.

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

app:
    build:
      context: app
      dockerfile: Dockerfile
19
Xiongbing Jin

J'ai eu ce problème sous Windows avec un docker-compose.yml créé par un modèle Visual Studio. Le modèle a été créé en tant que:

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

Et je devenais erreur: Cannot locate specified Dockerfile: <ProjectFolder>\Dockerfile. J'ai changé le \ en / et cela a commencé à fonctionner pour moi (c'est-à-dire <ProjectFolder>/Dockerfile). Peut-être que cela aidera si quelqu'un a cette erreur sous Windows.

7
crgolden

Dans le fichier docker-compose.yml pour effectuer le changement, afin de répondre au fichier Docker:

app:
  build: ./app
2
Dantez Layton

Est-ce que path est l'endroit où vous attendez le fichier Docker? Vous pouvez vérifier en utilisant le drapeau --verbose comme:

docker-compose --verbose up | grep compose.cli.verbose_proxy.proxy_callable | grep path

par exemple:

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')

dans Dockerfile, définissez l'ARGS:

ARG some_flag=
ARG some_build=1900
ARG addr=0.0.0.0
ARG corsdomain="*"
ARG rpcport=8545

et dans un fichier de composition comme:

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
1
jmunsch

Dans mon cas, c'était une mauvaise branche sur git. N'oubliez pas de définir la branche spécifique si vous construisez votre image à partir d'un contexte distant. L'URL du contexte devrait ressembler à ceci:

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

Vous devez spécifier correctement le nom de fichier du menu fixe et il est sensible à la casse. J'ai eu la lettre majuscule dans DockerFile et ainsi il ne peut pas les trouver. J'espère que ça aide quelqu'un qui a lutté comme moi. Il est préférable d’utiliser l’attribut dockerfile pour composer le fichier. 

app:
    build:
      dockerfile: DockerFile
0
Karthikeyan VK