web-dev-qa-db-de.com

docker-compose gibt ERROR: Angegebene Dockerfile: Dockerfile kann nicht gefunden werden

Ich habe ein Docker-Setup geklont, das Docker-Compose verwendet. Ein Remote-Entwickler bestätigt, dass es funktioniert. Mein Problem scheint also bei meinem Setup zu liegen. 

Ich lief docker-compose up, aber das gibt mir momentan folgendes:

$ 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

Mein docker-compose.yml sieht so aus:

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

und der Baum sieht so aus:

$ 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

Was ich nicht verstehe ist, dass docker-compose alle Dockerfiles zu finden scheint, mit Ausnahme derjenigen im app-Ordner. Ich habe unter OSX 10.11.2 Folgendes installiert:

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

Ich fange gerade mit Docker an und bin irgendwie hier festgefahren. Weiß jemand, was möglicherweise falsch ist oder wie ich das debuggen kann? Alle Tipps sind willkommen!

[EDIT] Ich habe vergessen zu erwähnen, dass es keine versteckte .dockerignore-Datei gibt:

$ ls -la
total 56
[email protected]   11 kramer  staff    374 25 mrt 14:13 .
drwx------+ 1134 kramer  staff  38556 26 mrt 17:27 ..
[email protected]    1 kramer  staff   8196 26 mrt 08:14 .DS_Store
[email protected]    1 kramer  staff     23 24 mrt 15:29 .gitignore
[email protected]    1 kramer  staff   3879 24 mrt 15:29 README.rst
[email protected]    7 kramer  staff    238 25 mrt 14:26 app
[email protected]    1 kramer  staff    868 25 mrt 17:50 docker-compose.yml
[email protected]    1 kramer  staff    219 24 mrt 15:29 env
[email protected]    3 kramer  staff    102 24 mrt 15:29 mongo
[email protected]    3 kramer  staff    102 24 mrt 15:29 mysql
[email protected]    3 kramer  staff    102 24 mrt 15:29 redis

und die .gitignore-Datei enthält auch nichts Besonderes (weiß nicht, ob es wichtig ist):

$ cat .gitignore
.project
.pydevproject
25
kramer65

So legen Sie die Docker-Datei fest. Leider kann ich das nicht in Kommentaren machen, da die Formatierung dort nicht unterstützt wird.

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

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

Ich hatte dieses Problem unter Windows mit einem docker-compose.yml, der von einer Visual Studio-Vorlage erstellt wurde. Die Vorlage wurde erstellt als:

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

Und ich bekam Fehler: Cannot locate specified Dockerfile: <ProjectFolder>\Dockerfile. Ich änderte den \ in / und es begann für mich zu arbeiten (d. H. <ProjectFolder>/Dockerfile). Vielleicht hilft das, wenn jemand diesen Fehler unter Windows hat.

7
crgolden

In der Datei docker-compose.yml, um die Änderung vorzunehmen, um die Docker-Datei zu treffen:

app:
  build: ./app
2
Dantez Layton

Ist path dort, wo Sie die Dockerfile erwarten? Sie können das Flag --verbose wie folgt überprüfen:

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

zum Beispiel:

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

in Dockerfile definieren Sie die ARGS:

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

und in einer compose-Datei wie:

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

In meinem Fall war es falsch am Zweig. Vergessen Sie nicht, einen bestimmten Zweig festzulegen, wenn Sie Ihr Image aus dem Remote-Kontext erstellen. Die URL für den Kontext sollte folgendermaßen aussehen:

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

Sie müssen den Namen der Docker-Datei richtig angeben, wobei die Groß- und Kleinschreibung zu beachten ist. Ich hatte Großbuchstaben in DockerFile und kann sie daher nicht finden. Ich hoffe es hilft jemandem, der wie ich kämpft. Verwenden Sie lieber das dockerfile-Attribut beim Erstellen der Datei. 

app:
    build:
      dockerfile: DockerFile
0
Karthikeyan VK