2016-03-26 23 views
9

Ho clonato una configurazione finestra mobile che utilizza la finestra mobile-compose. Uno sviluppatore remoto conferma che funziona, quindi il mio problema sembra essere nella mia configurazione.docker-compose restituisce ERRORE: impossibile individuare il file Docker: Dockerfile

mi sono imbattuto docker-compose up, ma che attualmente mi dà questo:

$ 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 

mio docker-compose.yml assomiglia a questo:

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 

e l'albero si presenta così:

$ 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 

Il cosa che non capisco è che docker-compose sembra trovare tutto Dockerfile s, ad eccezione di quello nella cartella app. Ho installato quanto segue su OSX 10.11.2:

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

Sto solo agli inizi con Docker e Sono un po 'bloccato qui. Qualcuno sa cosa potrebbe essere sbagliato o come posso eseguire il debug di questo? Tutti i suggerimenti sono ben accetti!

[EDIT] ho dimenticato di dire che non c'è alcun file .dockerignore nascosto:

$ 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 

e il file .gitignore non contiene nulla di speciale (non so se è importante):

$ cat .gitignore 
.project 
.pydevproject 
+0

Controlla se hai un '.docke nascosto file rignore' che potrebbe contenere 'Dockerfile' nel suo contenuto. Un altro motivo possibile è che si dispone di collegamenti simbolici nella struttura della cartella. –

+0

@warmoverflow - Ho dimenticato di dire che non esiste '.dockerignore'. Ho cercato l'intero file system ('sudo find/-name .dockerignore') e ho trovato un file' .dockerignore', ma quello era in qualche repository totalmente non correlato. Inoltre, non ci sono collegamenti simbolici nel progetto. – kramer65

+0

Puoi specificare esplicitamente il nome del Dockerfile per vedere se funziona. vedere https://docs.docker.com/compose/compose-file/#context.'build: contesto:. dockerfile: Dockerfile-alternate' –

risposta

8

Ecco come specificare il file di posta. Spiacente, non posso farlo nei commenti poiché la formattazione non è supportata da lì.

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

app: 
    build: 
     context: app 
     dockerfile: Dockerfile 
+0

Grazie per il suggerimento, ma ho appena trovato il problema. Risulta che il nome del Dockerfile era 'Dockerfile', incluso uno spazio alla fine. Non ho idea di come sia arrivato lo spazio, ma sì, funziona di nuovo .. :-) Grazie mille per i tuoi suggerimenti! Accetterò la tua risposta, perché mi avrebbe anche portato alla soluzione. – kramer65

+1

Felice di averlo scoperto. Questo è molto difficile da notare. –

+1

Per coloro che non sono chiari sul perché questo funziona, il motivo è perché il 'dockerfile' viene cercato all'interno del contesto di build definito. – mikegreenberg

1

È path dove ci si aspetta il Dockerfile? È possibile controllare con il --verbose bandiera come:

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

ad esempio:

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 definire le ARG:

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

e in un file di composizione simile:

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 
Problemi correlati