socat примеры использования и отладки: Docker, echo - сервер

Утилита socat в Linux позволяет устанавливать двунаправленные байтовые потоки между двумя точками, которые могут быть файлами, сетевыми соединениями, терминалами, файлами устройств и т.д. Это делает socat очень гибким инструментом для отладки программного обеспечения.

Когда вы вводите текст в терминале клиента и нажимаете Enter, этот текст отправляется на сервер, который затем отправляет его обратно, и вы видите этот текст в терминале клиента.

Настроим эхо-сервер: Запустите socat для создания TCP-сервера, который слушает порт 1234 и отправляет обратно все, что ему отправляют.

socat -v TCP-LISTEN:1235,fork exec:'/bin/cat'

Здесь TCP-LISTEN:1234 указывает socat открыть TCP-сервер на порту 1234, а fork позволяет обрабатывать множество соединений. Ключ -v позволяет отслеживать передачу данных. Exec указывает какую команду выполнять при получении запроса от клиента (эхо-функциональность). Клиенты, подключающиеся к этому серверу, будут видеть свои сообщения, отправленные обратно, благодаря использованию cat, который читает данные и сразу же их возвращает.

Настроим клиента: Теперь можно использовать другой экземпляр socat, nc или telnet, чтобы подключиться к этому серверу как клиент.

socat STDIN TCP:127.0.0.1:1235
OR
nc 127.0.0.1 1235
OR
telnet 127.0.0.1 1235

Здесь STDIN означает, что данные будут читаться со стандартного ввода (например, из терминала), а TCP:localhost:1234 указывает подключение к TCP-серверу, который вы создали на шаге 1.

Настроим прокси сервер socat для более подробного вывод команд докер, например вам нужно отладить проблему запуска контейнера. Нужно, при помощи socat, вставить доменный сокет Unix между вашим запросом и сокетом сервера Docker, чтобы посмотреть, что проходит через него.

Запустите socat прокси командой, где ключ fork гарантирует, что socat не завершит работу после первого запроса.

socat -v UNIX-LISTEN:/tmp/dockerapi.sock,fork UNIX-CONNECT:/var/run/docker.sock &

Весь трафик, проходящий в каждом направлении, socat будет видеть и будет дополнять любой вывод клиента docker. Запустим например какую-нибудь стандартную команду клиента docker. Мы увидим кроме данных выводимой самой командой также подробные HTTP запросы и ответы, данные будут в формате JSON.

docker -H unix:///tmp/dockerapi.sock ps -a

fg выводим список фоновых задач и останавливаем запущенный socat.

Использование socat - это мощный способ отладки не только Docker, но и любых других сетевых сервисов.

PQ VPS сервера в 28+ странах.