web-dev-qa-db-fra.com

docker-compose pas un tel service: myapp

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"
7
stackdave

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é).