欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-22 14:58:46
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"...

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容器内部获取宿主机ip地址方法以及报错解决
主要原因是因为宿主机和docker容器的SSH端口22没有打开,请确保宿主机和docker容器内都启动了SSH服务并且22端口都已经开放。具体请参考这篇博客

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

docker容器内部获取宿主机ip地址方法以及报错解决
遇到这个问题首先请确保你的hostname、username、password都正确。再去到容器内/etc/ssh/sshd_config处看看配置文件中将

PermitRootLogin prohibit-password

改为

PermitRootLogin yes

如图:

docker容器内部获取宿主机ip地址方法以及报错解决
如果解决完这一步还是报相同的错,则可以在容器内新建一个普通用户再去执行代码,应该可以解决了。

Done!

本文地址:https://blog.csdn.net/weixin_43220532/article/details/110879787