Iva*_*hek 40 docker docker-compose
我正在使用docker-compose
.
一些命令喜欢up -d service_name
或start service_name
正在立即返回,如果您不希望运行的容器依赖于 shell 的状态,这非常有用,就像它们对常规up service_name
. 一个用例是从某种连续的集成/交付服务器运行它。
但是这种运行/启动服务的方式并没有提供任何关于服务实际状态的反馈。
命令的Docker Compose CLI 参考up
确实提到了相关选项,但是,对于 version 1.7.1
,它与-d
以下内容互斥:
Run Code Online (Sandbox Code Playgroud)--abort-on-container-exit Stops all containers if any container was stopped. *Incompatible with -d.*
elq*_*sta 29
docker-compose ps -q <service_name>
无论容器是否正在运行,只要它被创建,就会显示容器 ID。docker ps
仅显示实际运行的那些。让我们结合这两个命令:
if [ -z `docker ps -q --no-trunc | grep $(docker-compose ps -q <service_name>)` ]; then
echo "No, it's not running."
else
echo "Yes, it's running."
fi
Run Code Online (Sandbox Code Playgroud)
docker ps
默认情况下显示短版本的 ID,因此我们需要指定--no-trunc
标志。
更新:如果服务没有运行,它会抛出“grep 使用”警告。感谢@Dzhuneyt,这是更新的答案。
if [ -z `docker-compose ps -q <service_name>` ] || [ -z `docker ps -q --no-trunc | grep $(docker-compose ps -q <service_name>)` ]; then
echo "No, it's not running."
else
echo "Yes, it's running."
fi
Run Code Online (Sandbox Code Playgroud)
Iva*_*hek 16
至于 version 1.7.1
,没有内置这样的命令。
相反,exec
可以以类似的方式使用。
当您为具有一些容器的服务运行它时,它将运行正常:
~/apperture-science $ docker-compose exec chell echo 'Still alive!'
Still alive!
~/apperture-science $ echo $?
0
Run Code Online (Sandbox Code Playgroud)
但是当你为没有运行服务容器的服务运行它时,它会显示一个错误:
~/apperture-science $ docker-compose exec glados echo "Still alive!"
ERROR: No container found for apperture-science-glados_1
~/apperture-science $ echo $?
1
Run Code Online (Sandbox Code Playgroud)
因此,它可用于检查给定服务是否有任何“活动”容器。
小智 9
查看所有正在运行的服务:
docker-compose ps --services --filter "status=running"
Run Code Online (Sandbox Code Playgroud)
要查看您的服务是否正在运行:
docker-compose ps --services --filter "status=running" | grep <your-service>
Run Code Online (Sandbox Code Playgroud)
请注意,出于某些外国原因--filter
必须使用 with --services
。
小智 6
你可以运行:
docker-compose ps -q service-name
Run Code Online (Sandbox Code Playgroud)
如果service-name
正在运行,您将获得容器的 id 。就像是:
18a04e61240d8ffaf4dc3f021effe9e951572ef0cb31da7ce6118f681f585c7f
Run Code Online (Sandbox Code Playgroud)
如果服务未运行,则输出为空,因此如果您想在脚本中使用它,您可以执行以下操作:
IS_RUNNING=`docker-compose ps -q service-name`
if [[ "$IS_RUNNING" != "" ]]; then
echo "The service is running!!!"
fi
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
47032 次 |
最近记录: |