docker-compose kein solcher Dienst: myapp

Ich habe ein Bild ausgeführt mit: 'docker-compose up'

Mit 'Docker ps' bekomme ich:

CREATED             STATUS              PORTS                    NAMES55e1fd18acf1        simpleappnodedocker_web   "node app.js"            6 seconds ago       Up 6 seconds        0.0.0.0:9000->3000/tcp   myapp9879ff20e241        postgres:9.6              "docker-entrypoint..."   36 hours ago        Up 36 hours         0.0.0.0:5432->5432/tcp   nd-db

Ich versuche, die Bash auszuführen, um in die Shell zu gelangen, aber ich bekomme eine Fehlermeldung, wie ich das lösen kann, ich denke, ich mache etwas falsch.

$docker-compose run myapp /bin/bash   ERROR: No such service: myapp

docker-komponieren.yml:

version: '2'services:  web:    container_name: myapp    build: .    command: node app.js    ports:      - "9000:3000"

Ich denke, du hast die Beziehung von docker und docker-compose Falsch:

docker-compose ist ein Wrapper um docker. Um seinen Job zu machen docker-compose benötigt seine Konfiguration: docker-compose.yaml

Spinnen Sie Ihr Beispiel weiter:

erstellen docker-komponieren.yaml:

version: '2'services:  web:    container_name: myapp    build: .    command: node app.js    ports:      - "9000:3000"

verwenden docker-compose so starten Sie den Container und führen einen Befehl im laufenden Container aus:

docker-compose updocker-compose exec web /bin/bash

docker-compose verwendet den Namen des Dienstes - in Ihrem Fall ist dies web - während docker verwendet den Containernamen - in diesem Fall myapp.

Also zu rennen /bin/bash durch docker, würden Sie Folgendes verwenden:

docker exec -ti myapp /bin/bash

sie könnten die entfernen container_name von docker-compose.yaml, dann würde der Container automatisch benannt nach docker-compose - ähnlich dem Dienst, jedoch mit vorangestelltem Namen des docker-compose stack (der Ordnername, in dem docker-compose.yaml befindet).

Die andere Antwort ist richtig, aber irgendwie war sie in ihrer umfassenden Erklärung zu "die Beziehung von Docker und docker-compose" etwas verwirrend.

Die Hauptsache, um den fraglichen Fehler zu beseitigen, ist, das zu tun, was der Fehler sagt: "FEHLER: Kein solcher Dienst:", daher müssen Sie müssen wählen Sie einen Dienst aus, der sich in Ihrer Erstellungsdatei befindet, und nicht der Containername. Im Beispiel ist es web, und NICHT myapp.

In Ihrem Fall laufen Sie nicht

docker-compose run --rm myapp bash

aber lauf

docker-compose run --rm web bash

Stellen Sie außerdem sicher, dass Sie den Befehl im selben Ordner wie Ihr Docker-compose ausführen.yml, sonst erhalten Sie die gleiche Fehlermeldung, aber Phillips obige Antwort funktioniert nicht.

du machst definitiv etwas falsch. Um Ihnen zu helfen, müsste ich wissen, was Sie getan haben und wie Sie es getan haben. Bitte posten Sie Ihre Docker-Compose.yaml und ein vollständiger Rückruf aller Ihrer Schritte.

es funktioniert mit: docker exec -it myapp / bin / bash

@Phillip-ZyanKLee-Stockmann Sie haben die yml-Konfiguration, müssen aber wirklich docker-compose run verwenden, wenn ich das mit docker run machen kann?

nein, das tust du nicht. aber es ist ein großartiges Tool, die Konfiguration zum Beispiel in einem Git-Repo zu haben

also, wo ist der Fehler?

Ahh, jetzt verstehe ich es, denke ich. Ich werde eine Antwort posten.