【发布时间】:2018-10-25 21:44:36
【问题描述】:
在 docker 网络中,我尝试使用 python 套接字在两个容器之间进行通信(发送数据包)。 Pinging 有效,但 python 套接字库不起作用。
错误:
line 6: conn, addr = sock.connect(('172.168.1.2', 4000))
TypeError: 'NoneType' object is not iterable
第一个 python3 receive.py 在 container1 中运行。然后 python3 send.py 在容器 2 中运行。容器 1 打印“已接受”,然后没有其他内容。如上所述的容器 2 错误。
此网络是用户定义的网络,具有自己的子网和默认网关。当我使用相同的代码连接到我的树莓派时,不会发生此错误,但容器通信会出错。
全部代码:
容器1:
import socket
def receive():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", 4000))
s.listen(2)
conn, addr = s.accept()
print("accepted")
print(bytes.decode(conn.recv(1024)))
容器 2:
import socket
def send():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
command = "bridge test!"
conn, addr = sock.connect(('172.168.1.2', 4000))
conn.sendall(command)
设置网络:
docker network create --subnet 172.168.1.0/24 testNetwork
docker network connect testNetwork container1
docker network connect testNetwork container2
我从 docker inspect 获得了容器的 IP 地址(加上对它们的 ping 工作)请帮忙!谢谢!
【问题讨论】:
-
“加上 ping 他们工作” ping 什么从什么?
-
我可以从主机和彼此内部 ping 容器
标签: python python-3.x sockets docker networking