Я запустил образ с: '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
расположен).