J'ai exécuté une image avec: 'docker-compose up'
Avec 'docker ps' j'obtiens:
CREATED STATUS PORTS NAMES
55e1fd18acf1 simpleappnodedocker_web "node app.js" 6 seconds ago Up 6 seconds 0.0.0.0:9000->3000/tcp myapp
9879ff20e241 postgres:9.6 "docker-entrypoint..." 36 hours ago Up 36 hours 0.0.0.0:5432->5432/tcp nd-db
J'essaie d'exécuter le bash pour accéder au shell, mais je reçois une erreur, comment résoudre ce problème, je pense que je fais quelque chose de mal.
$docker-compose run myapp /bin/bash
ERROR: No such service: myapp
docker-compose.yml:
version: '2'
services:
web:
container_name: myapp
build: .
command: node app.js
ports:
- "9000:3000"
Je pense que vous avez obtenu la relation de docker
et docker-compose
faux:
docker-compose
est un wrapper autour de docker
. Pour faire son travail docker-compose
a besoin de sa configuration: docker-compose.yaml
Faire tourner votre exemple plus loin:
créer docker-compose.yaml :
version: '2'
services:
web:
container_name: myapp
build: .
command: node app.js
ports:
- "9000:3000"
utilisation docker-compose
pour démarrer le conteneur et exécuter une commande dans le conteneur en cours d'exécution:
docker-compose up
docker-compose exec web /bin/bash
docker-compose
utilise le nom du service - dans votre cas, c'est web
- tandis que docker
utilise le nom du conteneur - dans ce cas myapp
.
Donc, pour exécuter /bin/bash
à docker
, vous utiliseriez ce qui suit:
docker exec -ti myapp /bin/bash
vous pouvez supprimer le container_name
de docker-compose.yaml
, le conteneur serait alors nommé automatiquement par docker-compose
- similaire au service, mais précédé du nom du docker-compose
stack (le nom de dossier où docker-compose.yaml
est situé).