无法通过 Python 向 Docker unix 套接字发送命令
Cannot send commands to Docker unix socket via Python
我有一个使用 nc
向容器发送信号的脚本(特别是支持 -U
用于 Unix 域套接字的 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 版本的任何错误,但是我的容器没有收到我尝试发送的信号。
在bash版本中,echo
提供了一个额外的新行。 HTTP 在 headers 之后需要两个新行,因此 Python sendall
需要第二个 \n
,如下所示:
sock.sendall(str.encode('POST /containers/{}/kill?signal=HUP HTTP/1.0\r\n\n'.format(environ['HAPROXY_CONTAINER'])))
我有一个使用 nc
向容器发送信号的脚本(特别是支持 -U
用于 Unix 域套接字的 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 版本的任何错误,但是我的容器没有收到我尝试发送的信号。
在bash版本中,echo
提供了一个额外的新行。 HTTP 在 headers 之后需要两个新行,因此 Python sendall
需要第二个 \n
,如下所示:
sock.sendall(str.encode('POST /containers/{}/kill?signal=HUP HTTP/1.0\r\n\n'.format(environ['HAPROXY_CONTAINER'])))