我已经使用“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 进入 shell,但出现错误,如何解决这个问题,我想我做错了什么。
$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"
答案1
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
from docker-compose.yaml
,然后容器将自动命名docker-compose
- 类似于服务,但以堆栈名称docker-compose
(所在的文件夹名称docker-compose.yaml
)为前缀。
答案2
另一个答案是正确的,但是在“docker 和 docker-compose 的关系”的广泛解释中有点令人困惑。
消除错误的主要方法是按照错误提示进行操作:“错误:没有这样的服务:”,因此,您必须选择 Compose 文件中的一项服务,然后不是容器名称。示例中为web
,而非myapp
。
在你的情况下,不要跑
docker-compose run --rm myapp bash
但要跑
docker-compose run --rm web bash
答案3
还要确保您在与 docker-compose.yml 相同的文件夹中运行该命令,否则您会收到相同的错误消息,但上述 Phillip 的回答将不起作用。
答案4
答案是...使用服务标签,而不是您选择的容器名称,正如questionto42standswithUkraine在答案中提到的那样
我也遇到了这个问题,因为我的 docker-compose.yml 文件有 5 种不同的版本,分别称为 docker-compose1/2/3/4/5.yml。每个版本都有相同的服务名称,只是环境定义不同。
docker-compose 日志将只工作如果我提供了我用来运行系统的配置文件。
所以
docker-compose -f docker-compose-3.yml -d
需要
docker-compose -f docker-compose-3.yml logs <service-name>
上班