当前位置:   article > 正文

docker容器内部获取宿主机ip地址方法以及报错解决_docker内部使用python获取宿主机ip

docker内部使用python获取宿主机ip

1,在docker容器内执行以下python代码或根据需要插入到你的.py文件中:

import paramiko #通过pip3 install paramiko 安装
s = paramiko.SSHClient()
s.load_system_host_keys()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect(hostname="A",port=22,username="B",password="C") #A为容器虚拟网桥的IP地址,默认为172.17.0.1,B为容器的用户名,C是密码
stdin,stdout,stderr = s.exec_command("python3 /home/aiot/test_ip.py") #/home/aiot/test_ip.py是我宿主机下获取ip的脚本
ip = stdout.read()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

test_ip.py脚本内容为:

import socket
"""get localhost ip address"""
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
ip = s.getsockname()[0]
print(ip)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

可能遇到的问题以及解决办法:
1,报错"paramiko.ssh_exception.NoValidConnectionsError: [Errno None] Unable to connect to port 22 on 172.17.0.4"

在这里插入图片描述
主要原因是因为宿主机和docker容器的SSH端口22没有打开,请确保宿主机和docker容器内都启动了SSH服务并且22端口都已经开放。具体请参考这篇博客

2,报错"paramiko.ssh_exception.AuthenticationException: Authentication failed."

在这里插入图片描述
遇到这个问题首先请确保你的hostname、username、password都正确。再去到容器内/etc/ssh/sshd_config处看看配置文件中将

PermitRootLogin prohibit-password
  • 1

改为

PermitRootLogin yes
  • 1

如图:

在这里插入图片描述
如果解决完这一步还是报相同的错,则可以在容器内新建一个普通用户再去执行代码,应该可以解决了。

Done!

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

闽ICP备14008679号