停止容器如何运行`docker-compose run`

use*_*984 44 docker docker-compose

我正在尝试用来docker-compose编排几个容器.要进行故障排除,我经常最终通过执行以下操作从容器中运行bash:

$ docker-compose run --rm run web bash
Run Code Online (Sandbox Code Playgroud)

我总是尝试传递--rm开关,以便在退出bash会话时删除这些容器.有时虽然,他们仍然存在,我看到它们的输出docker-compose ps.

           Name                          Command                State      Ports
----------------------------------------------------------------------------------
project_nginx_1            /usr/sbin/nginx                  Exit 0
project_nginx_run_1        bash                             Up         80/tcp
project_web_1              python manage.py runserver ...   Exit 128
project_web_run_1          bash                             Up         8000/tcp
Run Code Online (Sandbox Code Playgroud)

此时,我试图手动停止并删除这些组件,但我无法做到这一点.我试过了:

$ docker-compose stop project_nginx_run_1
No such service: project_nginx_run_1
Run Code Online (Sandbox Code Playgroud)

我也尝试了其他命令rm,kill等等.

我该怎么做才能摆脱这些容器?

编辑:

修正了输出docker-compose ps.

Tho*_*eil 49

docker stop命令停止那些测试容器而不是使用docker-compose.

docker-compose当涉及到启动许多容器时会发光,但是使用docker-compose启动容器并不会阻止您使用docker命令来执行您需要对单个容器执行的任何操作.

docker stop project_nginx_run_1 project_web_run_1 
Run Code Online (Sandbox Code Playgroud)

此外,由于您正在调试容器,我建议使用docker-compose exec <service id> bash在正在运行的容器中获取shell.这具有不启动新容器的优点.

  • 如果你已经运行了一些运行容器,那么在重新旋转核心容器之前,使用`docker stop $(docker ps -q)`停止所有正在运行的容器可能会很有用. (5认同)
  • 只需在包含 docker-compose.yaml 文件的目录中发出 `docker-compose stop` 也可以。 (2认同)
  • 分离运行时的附加说明:`docker-compose run -d` 在标准输出上返回容器名称,因此将其捕获在变量中:`NAME=$(docker-compose run -d ...)`。然后使用`docker rm -f $NAME`。 (2认同)

mrs*_*vas 6

使用 docker-compose,可以通过两种方式停止服务,但我想添加一些有关这两个选项的详细信息。

简而言之

docker-compose down

停止和删除容器、网络、图像和卷

docker-compose stop

停止服务


详细

如果docker-compose run启动服务project_nginx_run_1project_web_run_1,则

docker-compose down 日志将是

$ docker-compose down
Stopping project_nginx_run_1 ...
Stopping project_web_run_1 ...

.
. some service logs goes here

Stopping project_web_run_1 ... done
Stopping project_nginx_run_1 ... done
Removing project_web_run_1 ... done
Removing project_nginx_run_1 ... done
Removing network project_default
Run Code Online (Sandbox Code Playgroud)

docker-compose stop 日志将是

$ docker-compose stop
Stopping project_nginx_run_1 ...
Stopping project_web_run_1 ...

.
. some service logs goes here

Stopping project_web_run_1 ... done
Stopping project_nginx_run_1 ... done
Run Code Online (Sandbox Code Playgroud)

  • 我不知道为什么这被否决了,但也许解决方案太广泛了 - 我想最初的问题是希望停止单个服务。 (4认同)
  • 问题询问如何停止以 docker-compose **run** 启动的容器,而不是 docker-compose **up** 。“down”和“stop”命令不适用于 **run** 启动的容器。 (3认同)

小智 5

docker-compose不同docker,它使用文件中定义的容器名称yml。因此,要仅停止一个容器,命令将是:

docker-compose stop nginx_run
Run Code Online (Sandbox Code Playgroud)

  • 恕我直言,这是唯一正确的答案。我发现,当使用 docker-compose 在容器上使用 `restart: except-stopped` 时,如果使用 `docker stop &lt;service name&gt;` 那么服务将简单地重新启动,但仅当使用 `docker-compose stop xxx` 时该服务真的会停下来 (2认同)