gpt4 book ai didi

docker - 在传入的 HTTP 请求上启动 docker 容器

转载 作者:行者123 更新时间:2023-12-02 18:06:10 25 4
gpt4 key购买 nike

我有一台服务器在单独的 docker 容器中运行多个 Web 应用程序。我正在使用 Traefik作为反向代理。因此,每当容器闲置 15 分钟时,我都会从内部停止容器(结束导致容器停止的运行过程)。如何按需重新启动容器,即当有对已停止容器的传入请求时?

正如所问,我没有使用任何集群管理器或类似的东西。基本上,我有一个 API 服务器,它使用 docker-py库来创建图像和容器。每当创建容器以将 URL 路由到相应容器时,Traefik 都会监听 docker 事件并生成配置。

我尝试了 systemd 套接字激活。这是套接字和服务文件。

app.socket

[Unit]
Description=App Socket

[Socket]
ListenStream=3000
Accept=yes

[Install]
WantedBy=sockets.target

app@.service
[Unit]
Description=App Service
Requires=app.socket

[Service]
Type=simple
ExecStart=/usr/bin/npm start --prefix /path/to/dir
StandardInput=socket
StandardError=journal
TimeoutStopSec=5

[Install]
WantedBy=multi-user.target

这是我目前的做法。我的容器正在运行节点应用程序。所以,我结束了容器内的节点进程。在结束节点进程时,我将启用并启动 app.socket .当端口 3000 上有传入流量时,我的应用程序将通过套接字激活启动。

但是当我尝试访问该端口时没有任何 react 。我已经确认套接字激活正在工作。当我执行命令时 date | netcat 127.0.0.1 3000 ,应用程序似乎启动,然后立即停止,没有任何错误。

也许套接字激活不能像我期望的那样工作。我可以看到一个进程 init带PID 1启用后正在端口 3000 上运行 app.socket .一旦流量到达端口 3000,我想在容器内启动我的节点应用程序。但是,如果该端口上已经有一个进程在运行,那么应用程序如何在 3000 上启动?

也许有一些方法可以用 来做到这一点。 Traefik 因为它是我使用的反向代理。是否有一些功能可以让我在发生 404 时执行命令或脚本?

最佳答案

如果你能告诉你如何管理你的 docker 容器(k8 或 swarm 或其他任何东西)会更有帮助。但是根据您的初始输入,我猜您正在寻找 Inetd 或 systemd 套接字激活。这篇文章很有帮助https://www.reddit.com/r/docker/comments/72sdyf/startrun_a_container_when_incoming_traffic/

关于docker - 在传入的 HTTP 请求上启动 docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52848648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com