停止 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
我试图停止一个 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