• 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

  • 相关阅读:
    JavaScript中的原型链(prototype chain)
    普冉PY32系列(六) 通过I2C接口驱动PCF8574扩展的1602LCD
    Java基础(四)
    Benchmarking Chinese Text Recognition: Datasets, Baselines| OCR 中文数据集【论文翻译】
    【苹果群发】iMessage苹果推字符串访问权限,而我们在SSL推杆证书中的步骤相同
    Redis分布式锁(中)
    如果我们是那晚负责修复 B 站崩了的开发人员
    linux 常规部署教程
    GUI编程
    Android 网络配置
  • 原文地址:https://blog.csdn.net/x948130516/article/details/136746900