docker - compose nenhum serviço: myapp

Eu executei uma imagem com: 'docker-compose up'

Com 'docker ps' eu recebo:

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

Eu tento executar o bash para entrar no shell, mas recebo um erro, Como resolver isso, acho que estou fazendo algo errado.

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

Eu acho que você tem a relação de docker e docker-compose errado:

docker-compose é um invólucro ao redor docker. Para fazer seu trabalho docker-compose precisa de sua configuração: docker-compose.yaml

Girando seu exemplo ainda mais:

criar docker-compose.yaml:

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

usar docker-compose para iniciar o contêiner e executar um comando no contêiner em execução:

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

docker-compose usa o nome do serviço - no seu caso, isso é web - enquanto docker usa o nome do contêiner-neste caso myapp.

Então, para correr /bin/bash por docker, você usaria o seguinte:

docker exec -ti myapp /bin/bash

você pode remover o container_name de docker-compose.yaml, então o contêiner seria nomeado automaticamente por docker-compose - semelhante ao serviço, mas prefixado com o nome do docker-compose stack (o nome da pasta onde docker-compose.yaml está localizado).

A outra resposta está certa, mas de alguma forma foi um pouco confusa em sua ampla explicação sobre " A relação de docker e docker-compose".

A principal coisa a se livrar do erro em questão é fazer o que o erro diz: & quot; erro: não existe tal serviço: & quot;, portanto, você dever escolha um serviço que esteja em seu arquivo de composição e nao o nome do contêiner. No exemplo, é web, e não myapp.

No seu caso, não corra

docker-compose run --rm myapp bash

mas corra

docker-compose run --rm web bash

Verifique também se você está executando o comando na mesma pasta que o docker-compose.yml, caso contrário, você receberá a mesma mensagem de erro, mas a resposta de Phillip acima não funcionará.

você está definitivamente fazendo algo errado. Para ajudá-lo, eu precisaria saber o que você fez e como você fez isso. Por favor, publique seu docker-compose.yaml e um recall completo de todos os seus passos.

está funcionando com: Docker exec-it myapp / bin / bash

@ Phillip-ZyanKLee-Stockmann você tem a configuração yml, mas realmente precisa usar docker-compose run, se eu puder fazer isso com docker run?

Não, você não faz. mas é uma ótima ferramenta ter a configuração em um repositório git, por exemplo

então, onde está o erro?

Ahh, agora eu entendo, eu acho. Vou postar uma resposta.