当前位置:   article > 正文

docker内部无法使用ping等网络工具解决方案_docker容器中没有ping命令怎么办

docker容器中没有ping命令怎么办

通常docker内部没有网络,所以我们先离线安装需要的依赖包,然后再使用sh脚本容器内部访问宿主机同网络端其他服务器ip,实现监测远程ip

telnet包依赖于netbase包,但是netbase包没有安装。你需要先安装netbase包,然后再尝试安装telnet。
apt-get download netbase
dpkg -i  netbase*.deb

安装telnet
apt-get download telnet
dpkg -i  telnet_*.deb
telnet 10.1.7.139 1883

安装ping
apt-get download iputils-ping#在有网络的宿主机下载安装包
dpkg -i  iputils-ping_*.deb#在容器内部执行安装指令安装离线包
ping 10.1.7.139 1883#测试

通信测试脚本

  1. #!/bin/bash
  2. service mosquitto start
  3. echo "mosquitto..."
  4. sysctl vm.overcommit_memory=1
  5. service redis-server start &
  6. echo "redis..."
  7. mongod -f /data/config/mongod.conf --fork
  8. echo "mongo..."
  9. service nginx start
  10. echo "nginx..."
  11. # 要ping的服务器地址
  12. SERVER_IP="10.1.77.74"
  13. # 要检查的端口
  14. SERVER_PORT=1883
  15. # 等待时间(秒)
  16. WAIT_TIME=60
  17. # 尝试连接端口的函数
  18. check_port() {
  19. local ip="$1"
  20. local port="$2"
  21. # 尝试使用telnet连接到指定端口,并立即发送quit命令退出
  22. (echo quit; sleep 1) | telnet "$ip" "$port" 2>&1 | grep -q "Connected"
  23. # 根据grep的退出状态来返回结果
  24. return $?
  25. }
  26. # 无限循环直到服务器可达和端口开放
  27. while true; do
  28. # 尝试ping服务器
  29. if ping -c 1 "$SERVER_IP" &> /dev/null; then
  30. echo "$(date): Server $SERVER_IP is reachable."
  31. # 尝试检查端口是否开放
  32. if check_port "$SERVER_IP" "$SERVER_PORT"; then
  33. echo "$(date): Port $SERVER_PORT is open on $SERVER_IP."
  34. # 在这里执行后续命令
  35. echo "$(date): Executing commands..."
  36. # 例如:
  37. # service some_service start
  38. # /path/to/some/script.sh
  39. cd /bwss/agent/iot/server/edgeagent/ && ./start.sh
  40. echo "edgeagent..."
  41. sleep 10;
  42. cd /bwss/agent/iot/server/collector/ai-collector/ && ./start.sh
  43. echo "ai-collector..."
  44. break
  45. # 如果需要的话,可以在这里添加退出循环的条件
  46. # 例如:检查某个服务是否已成功启动
  47. # if [ some_condition ]; then
  48. # break
  49. # fi
  50. else
  51. echo "$(date): Port $SERVER_PORT is closed on $SERVER_IP. Retrying..."
  52. fi
  53. else
  54. echo "$(date): Server $SERVER_IP is unreachable. Retrying after $WAIT_TIME seconds..."
  55. fi
  56. # 等待一段时间后再次尝试
  57. sleep $WAIT_TIME
  58. done

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/621512
推荐阅读
相关标签
  

闽ICP备14008679号