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

18 篇文章 1 订阅
16 篇文章 1 订阅

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()

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,报错"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

改为

PermitRootLogin yes

如图:

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

Done!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CrystalheartLi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值