首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法在坞内创建套接字

无法在坞内创建套接字
EN

Stack Overflow用户
提问于 2019-09-05 08:57:54
回答 1查看 1.2K关注 0票数 0

我有一个ubuntu对接映像,其中安装了python(2.7)。我正试图在映像中创建一个python套接字服务器。启动容器时,我将主机的IP作为环境变量传递。我就是这样启动容器的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -it -e host_ip=`hostname -I | awk '{ print $1 }'` ubuntu

进入容器后,我运行这个python脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import socket
import os
host_ip = os.environ['host_ip']
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host_ip, 9876))
s.listen(10)
while 1:
    conn, addr = s.accept()
    data = conn.recv(1024)
    print data
    conn.send(str.encode('hello world\nbye world'))
    conn.close()
    if data == "EOF":
        break
s.close()

在运行脚本时,我会得到以下错误:

回溯(最近一次调用):文件"SocketServer.py",第5行,在s.bind((host_ip,9876) File "/usr/lib/python2.7/socket.py“中,第228行,在meth返回getattr(self._sock,name)(*args) socket.error: Errno 99不能指定请求的地址

我犯了什么错?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-05 09:00:49

默认情况下,容器与主机网络堆栈隔离。分配给主机网络接口的地址对容器不可用。这是使它成为一个容器的部分原因。

您应该绑定到容器的地址,并安排将端口从主机转发到容器,或者让容器共享主机网络。

例如,告诉应用程序绑定到127.0.0.1,然后转发端口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -it -e host_ip=127.0.0.1 -p 9876:9876 ...

或者让容器使用主机网络:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -it -e host_ip=127.0.0.1 --network=host ...
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57809997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文