Using netcat to pipe unix socket to tcp socket

2020-06-18 03:15发布

I am trying to expose a unix socket as a tcp socket using this command:

nc -lkv 44444 | nc -Uv /var/run/docker.sock

When I try to access localhost:44444/containers/json from a browser, it doesn't load anything but keeps the connection open (the loading thingy keeps spinning), but the console (because of the -v flag) shows proper http response.

Any ideas on how to get this working?

PS: I know I can use socat, or just tell docker to also listen on a tcp socket, but I am using the project atomic vm image, and it won't let me modify anything except /home.

1条回答
啃猪蹄的小仙女
2楼-- · 2020-06-18 03:53

You are only redirecting incoming data, not outgoing data. try with:

mkfifo myfifo
nc -lkv 44444 <myfifo | nc -Uv /var/run/docker.sock >myfifo

See http://en.wikipedia.org/wiki/Netcat#Proxying

Edit: in a script you would want to generate the name for the fifo at random, and remove it after opening it:

FIFONAME=`mktemp -u`
mkfifo $FIFONAME
nc -lkv 44444 < $FIFONAME | nc -Uv /var/run/docker.sock > $FIFONAME &
rm $FIFONAME
fg
查看更多
登录 后发表回答