Docker 码头工人:如何从一个正在运行的集装箱向另一个集装箱发送信号?

Docker 码头工人:如何从一个正在运行的集装箱向另一个集装箱发送信号?,docker,signals,Docker,Signals,我正在使用docker,我想知道:是否可以从一个运行的容器向另一个运行的容器发送信号 更准确地说,我想将SIGUSR1发送到python程序 我已经编写了一个bash脚本来获取python进程的pid并发送信号: send_signal.sh #/bin/bash py_pid=$(pidof-s python my_program.py) kill-SIGUSR1$py_pid 之前,我从Docker主机执行send_signal.sh,如下所示: docker exec docker\u和

我正在使用docker,我想知道:是否可以从一个运行的容器向另一个运行的容器发送信号

更准确地说,我想将SIGUSR1发送到python程序

我已经编写了一个bash脚本来获取python进程的pid并发送信号:

send_signal.sh

#/bin/bash
py_pid=$(pidof-s python my_program.py)
kill-SIGUSR1$py_pid

之前,我从Docker主机执行send_signal.sh,如下所示:

docker exec docker\u和python bash send\u signal.sh

或者简单地说:

docker kill--signal=“SIGUSR1 docker\u with\u python

但现在,我想将信号发送到另一个正在运行的容器。那么,如何从另一个正在运行的容器执行此命令。或者是否有其他发送信号的方法


提前感谢

要完成此任务,您需要将Docker socket从主机安装到您希望从中发送信号的容器中。例如,请参阅以获取解释和详细信息。

这是我使用的代码。它可以帮助其他人:

echo-e“POST/containers//kill?signal=SIGUSR1 HTTP/1.0\r\n”| nc-U/tmp/docker.sock

以前,在我的docker-compose.yml中,我共享了卷:

example1
主机名:示例1
卷数:
-/var/run/docker.sock:/tmp/docker.sock

您可以在python中通过重写
HTTPConnection的套接字来实现这一点

导入套接字
从http.client导入HTTPConnection
f='/var/run/docker.sock'#或将其安装到容器中的任何位置
s=socket.socket(socket.AF\u UNIX,socket.SOCK\u流)
s、 连接(f)
conn=HTTPConnection(“未使用”)
conn.sock=s
conn.request('POST','/containers//kill?信号=SIGHUP')
resp=conn.getresponse()
打印(各自状态)
打印(分别为标题)
打印(分别读取())
优点是您可以检查状态是否成功(a 204)。如果状态指示错误,响应主体将显示错误消息


如已接受的答案所示,如果要在容器中安装docker套接字,则需要安装该套接字:
-v/var/run/docker.sock:/tmp/docker.sock
,并将代码更改为指向正确的套接字。

谢谢,我看过这篇文章。我认为还有其他解决方案,但无论如何,我会使用此解决方案。谢谢!我曾经进行过相同的API调用。请注意,通过与容器共享Docker套接字,容器可以完全控制Docker守护程序,包括启动一个新容器,并在容器中装入主机的根目录。这意味着如果有人试图破坏您的容器,他们将实际上,我也会拥有你的主人。另请参见。