Как сделать ping в redis без CURL или NC в консоли на проде в 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 адрес.