无法通过Python

时间:2018-03-10 06:27:05

标签: python docker unix-socket

我有一个使用nc向容器发送信号的脚本(特别是支持Unix域套接字-U的openbsd版本):

echo -e "POST /containers/$HAPROXY_CONTAINER/kill?signal=HUP HTTP/1.0\r\n" | \
nc -U /var/run/docker.sock

我想知道是否可以避免使用openbsd nc依赖项或socat依赖项,因此我尝试在Python 3中执行相同的操作:

import socket

sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect('/var/run/docker.sock')
sock.sendall(str.encode('POST /containers/{}/kill?signal=HUP HTTP/1.0\r\n'.format(environ['HAPROXY_CONTAINER'])))

我没有从Python版本中获得任何错误,但是我的容器没有收到我试图发送的信号。

1 个答案:

答案 0 :(得分:0)

在bash版本中,echo提供了一个额外的新行。 HTTP在标题之后需要两个新行,因此Python sendall需要第二个\n,如下所示:

sock.sendall(str.encode('POST /containers/{}/kill?signal=HUP HTTP/1.0\r\n\n'.format(environ['HAPROXY_CONTAINER'])))