Назад | Перейти на главную страницу

docker-compose нет такой службы: myapp

Я запустил образ с: 'docker-compose up'

С помощью docker ps я получаю:

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

Я пытаюсь запустить bash, чтобы войти в оболочку, но получаю сообщение об ошибке, как ее решить, я думаю, что делаю что-то не так.

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

Я думаю, у вас есть отношение docker и docker-compose неправильно:

docker-compose это обертка вокруг docker. Делать свою работу docker-compose нужна его конфигурация: docker-compose.yaml

Продолжая ваш пример:

Создайте docker-compose.yaml:

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

использовать docker-compose чтобы запустить контейнер и запустить команду в работающем контейнере:

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

docker-compose использует название службы - в вашем случае это web - в то время как docker использует имя контейнера - в данном случае myapp.

Так что бежать /bin/bash через docker, вы должны использовать следующее:

docker exec -ti myapp /bin/bash

вы могли бы удалить container_name из docker-compose.yaml, тогда контейнер будет автоматически назван docker-compose - аналогично сервису, но с префиксом имени docker-compose стек (название папки, где docker-compose.yaml расположен).