docker-compose 没有这样的服务:myapp

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 进入 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/bashdocker您可以使用以下命令:

docker exec -ti myapp /bin/bash

您可以删除container_namefrom 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>

上班

相关内容