Как сделать ping в redis без CURL или NC в консоли на проде в docker
Я нашел небольшой сниппет кода (команду) на Stack Overflow, который позволяет мне проверить доступность redis из docker контейнера, где нет curl или nc команд. Будет актуально всем, кто использует максимально легкие контейнеры в docker, alpine docker
Недавно мне нужно было пропинговать Redis (ping redis) из контейнера докера, чтобы убедиться, что он доступен. Проблема в том, что вы не можете перезапустить Docker-контейнер для установки чего-либо, потому что изменения не сохранятся без перестройки контейнера.
Я нашел этот небольшой фрагмент кода на Stack Overflow, который позволил мне проверить соединение с Redis из моего docker контейнера.
exec 3<>/dev/tcp/<YourRedisServerAddress>/6379 && \
echo -e "PING\r\n" >&3 && \
head -c 7 <&3Console command for ping redis in docker container
Если вы можете подключиться к серверу и доступ к redis есть, вы должны получить ответ +PONG на PING запрос конечной точки.
Пример через docker-compose.yaml
Собрал быстро небольшой пример для демонстрации на базе docker и локальной разработки, но такая команда очень нужна была на проде для проверки работы сети.
services:
redis:
image: redis:7.4-alpine
restart: always
ports:
- "6379:6379"
volumes:
- redis_data:/data
php-fpm:
image: php:8.2-fpm
volumes:
- ./:/var/www/html:rw
volumes:
redis_data:
driver: localdocker-compose.yaml для демонстрации redis connect test
Далее вызываем команду docker compose up -d и наблюдаем логи как поднимается redis и рядом с ним контейнер php-fpm.
~/dev/trash/redis-test docker compose up -d
[+] Running 21/21
✔ php-fpm Pulled 21.1s
✔ 64e67eb868eb Pull complete 0.7s
✔ a00585d56b82 Pull complete 0.4s
✔ 1a69dc721f20 Pull complete 0.8s
✔ 61aafc8de441 Pull complete 0.7s
✔ 50f27088e546 Pull complete 17.8s
✔ cb7d3c59aa83 Pull complete 0.8s
✔ 38a941fa3865 Pull complete 5.0s
✔ b791392dd0fd Pull complete 0.8s
✔ 4c7ed7d337db Pull complete 0.8s
✔ 4f4fb700ef54 Pull complete 0.2s
✔ f626fba1463b Pull complete 11.0s
✔ 59d1feadc1c1 Pull complete 17.5s
✔ redis Pulled 10.7s
✔ f644b71be12e Pull complete 0.5s
✔ b3c1bc2ae482 Pull complete 7.3s
✔ e43997775f51 Pull complete 0.8s
✔ a4cd490265be Pull complete 1.8s
✔ c2fe130f4aab Pull complete 7.2s
✔ ea7069ec8986 Pull complete 1.5s
✔ cda2dfd82503 Pull complete 0.9s
[+] Running 4/4
✔ Network redis-test_default Created 0.0s
✔ Volume "redis-test_redis_data" Created 0.0s
✔ Container redis-test-redis-1 Started 0.2s
✔ Container redis-test-php-fpm-1 Started 0.2sЛоги после запуска redis в docker
После делаю коннект к контейнеру php-fpm и из него запускаю команду проверки подключения к redis - exec 3<>/dev/tcp/redis/6379 && echo -e "PING\r\n" >&3 && head -c 7 <&3 и вижу ответ +PONG. Значит все успешно отработало и мы имеет сетевую доступность редиса из контейнера с пхп.

Обратите внимание, что я заменил /dev/tcp/<YourRedisServerAddress>/6379 на /dev/tcp/redis/6379 так как в данной сети адрес редиса называется redis, но в вашем случае на проде это может быть любой IP адрес.