停止 Nginx Docker 容器

Stop a Nginx Docker container

我试图停止一个 Docker 容器 运行 Nginx 只有在该 Nginx 实例的 access.log 中没有 activity 一段时间后.

是否可以从容器内部停止 Docker 容器?我能想到的另一个解决方案是在主机 OS 上有一个 cron 运行 来检查 /var/lib/docker/aufs/mnt/[container id]/ 但我计划启动大量容器并且不想保留ID 列表。

您可以在 docker 图片中分享您的 docker 袜子,然后进行任何必要的操作。

要在 docker 图片中分享 docker 袜子,请执行以下操作: docker run -v /var/run/docker.sock:/run/docker.sock -v $(which docker):/bin/docker YOUR_IMAGE

在 ENV 变量中,您将拥有容器 ID,例如容器 echo $HOSTNAME

中的 运行

Docker 可以在 运行ning 容器中使用 exec 命令 运行 命令:

 docker exec [-d|--detach[=false]] [--help] [-i|--interactive[=false]] [-t|--tty[=false]] CONTAINER COMMAND [ARG...]

当容器中的主进程停止时,docker容器也停止。

我设置了一个小 docker 文件和一个启动脚本来展示这在您的情况下如何工作:

Dockerfile

FROM nginx
COPY start.sh /
CMD ["/start.sh"]

start.sh

#!/bin/bash
nginx &
sleep 20
# replace sleep 20 with your test of inactivity 
nginx stop

构建容器,运行并测试

$ docker build -t ng .

$ docker run -d ng 

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
3a373e721da7        ng:latest           "/start.sh"         4 seconds ago       Up 3 seconds        443/tcp, 80/tcp     distracted_colden   
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
3a373e721da7        ng:latest           "/start.sh"         16 seconds ago      Up 16 seconds       80/tcp, 443/tcp     distracted_colden   
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
$

我 运行 一个 nginx 容器,然后无法再次启动它:

nginx: [emerg] bind() to unix:/var/run/nchan.sock failed (98: Address already in use)

最简单的解决方法就是 "prune":

docker system prune