首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法连接到本地停靠的devpi容器,以便在没有"--net=host“的情况下在另一个容器中进行pip安装

无法连接到本地停靠的devpi容器,以便在没有"--net=host“的情况下在另一个容器中进行pip安装
EN

Stack Overflow用户
提问于 2020-01-20 18:13:19
回答 2查看 85关注 0票数 0

我在docker容器中运行devpi,如下所示:

代码语言:javascript
复制
[Unit]
Description=devpi docker-container
Requires=docker.service
After=docker.service

[Service]
Restart=always
RestartSec=3
ExecStart=/usr/bin/docker run --rm -p 3141:3141 --name devpi -v /devpi_data:/data -e DEVPI_PASSWORD='********' akailash/docker-devpi
ExecStop=/usr/bin/docker stop -t 2 devpi

[Install]
WantedBy=multi-user.target

它运行得很好。我可以通过主机上的URL访问它,也可以像预期的那样从它安装软件包。

代码语言:javascript
复制
6f663ba131a1        akailash/docker-devpi   "/docker-entrypoint.…"   3 hours ago         Up 3 hours          0.0.0.0:3141->3141/tcp   devpi

然而,如果我想要构建另一个docker镜像来安装来自这个容器的包,有一个ConnectTimeout。如果我尝试卷曲,连接会在一段时间后超时。

如果我按照这个issue中描述的那样使用--net=host选项,我就可以执行pip安装。但是,我不希望必须使用主机网络。我尝试了0.0.0.0:3141和172.17.0.1:3141,我得到了相同的结果。在docker守护进程服务中添加--ip=0.0.0.0对我不起作用。如何才能从另一个容器访问devpi容器,而不必每次都使用--net=host?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-01 12:22:21

因为我只需要访问devpi,它构建docker-compose文件中所需的docker映像,所以我在构建上下文中使用了主机网络:

代码语言:javascript
复制
build:
  network: host
  context: .
  dockerfile: Dockerfile.local

这有助于正确访问devpi。

票数 0
EN

Stack Overflow用户

发布于 2020-01-20 20:22:42

如果您不想使用--net=host,那么您需要打开运行devpi的机器上的端口,以允许外部客户端连接和使用它。

重点是,当您将主机网络设置为docker时,它会获取自己的IP地址,然后它可以在该IP地址上绑定您需要的任意多个端口,但如果您不使用它,您的计算机将充当容器的路由器,并应用NAT以允许访问互联网以获得传出流量,但拒绝传入流量。

因此,如果您不想使用主机网络,则必须修改防火墙以添加目标NAT规则,并允许流量到达服务。

关于如何允许iptables here上的端口,您有一些很好的示例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59821060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档