docker-compose non può trovare servizi o contenitori in Docker per Mac

Ho un set-up di compose che inizia un'applicazione web Rails e un contenitore DB PostgreSQL.

Entrambi i servizi iniziano, ma devo eseguire db: seed e db: migrare nel contenitore dell'applicazione web (service = "web").

Cerco di farlo con:

docker-compose exec web rails db:seed 

Ma mi dice:

 ERROR: No container found for web_1 

Quando provo con docker:

 docker exec <container-id> rails db:seed 

Docker tenta di eseguire il command nel contenitore, ma ovviamente non riesce, in quanto il docker non ha alcuna conoscenza del contenitore PostgreSQL e non può connettersi ad esso per eseguire il command di semi.

Questo sembra solo essere un problema in Docker for Mac. Tutto funziona bene in Ubuntu.

Sto utilizzando Versione 1.8.0 di docker-compose e 1.12.1 di docker.

Quando si esegue eseguire il docker-compose run genera un nome univoco random per il contenitore in esecuzione, è necessario specificare che quando si utilizza exec.

$ docker-compose run bot ...

In un altro terminal:

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 306bd1381f81 rroemhild/errbot "/app/venv/bin/run.sh" 13 seconds ago Up 11 seconds 3141-3142/tcp err_bot_run_31 $ docker exec bot whoami Error response from daemon: No such container: bot $ docker exec err_bot_run_31 whoami err

Ok, ha trovato la risposta. Non so se questo è specifico per Docker per Mac, ma non ho avuto questo problema in Ubuntu.

Ho 2 terminali in esecuzione. Nella prima ho corso

 docker-compose up 

per far emergere i miei servizi.

Nel secondo, ho corso:

 docker-compose exec web rails db:seed 

Per eseguire il command dei binari nel mio contenitore web.

Ecco cosa: nel secondo terminal, devi essere nella stessa directory del file docker-compose.yml. Non è ansible eseguire solo i comandi di compilatore da qualsiasi punto.

Quando ho cambiato la directory corretta nel mio secondo terminal, i comandi di esecuzione funzionavano bene.