首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从该模式之外的另一个容器获取特定network_mode中容器的IP?

如何从该模式之外的另一个容器获取特定network_mode中容器的IP?
EN

Stack Overflow用户
提问于 2021-10-20 01:16:29
回答 1查看 75关注 0票数 1

在一个项目中,修船厂中有三个服务组成yml:

虚拟专用网

使用first连接到该虚拟专用网的容器(名为network_mode )。

未连接到该虚拟专用网的容器(名为second)。

通过first,我可以使用容器名(第二个)获得second的IP,但是oposite不能工作。

"first“和"second”是使用套接字相互发送数据的简单python脚本。

如果我使用IP地址而不是容器名,我可以将数据从“第二”发送到“第一”,但这不是我可以在项目中使用的解决方案。

这是我正在使用的.yml:

代码语言:javascript
复制
version: '3.9'

services:
    vpn:
        build: ./vpn
        container_name: vpn
        env_file:
            - ss.env
        cap_add: 
            - NET_ADMIN
            - NET_RAW
        devices:
            - /dev/net/tun:/dev/net/tun
        dns:
            - 1.1.1.1

    first:
        build: ./first
        container_name: first
        depends_on: 
            - vpn
        network_mode: service:vpn

    second:
        build: ./second
        container_name: second
        depends_on: 
            - vpn

python脚本的相关部分:

代码语言:javascript
复制
#first.py
client.sendto(bytes('message from second',encoding='utf8'), ('second', 37021))

#second.py
client.sendto(bytes('message from second',encoding='utf8'), ('first', 37020))

另外,vpn日志:

代码语言:javascript
复制
vpn       | 2021-10-20 00:44:21 TUN/TAP device tun0 opened
vpn       | 2021-10-20 00:44:21 /sbin/ip link set dev tun0 up mtu 1500
vpn       | 2021-10-20 00:44:21 /sbin/ip link set dev tun0 up
vpn       | 2021-10-20 00:44:21 /sbin/ip addr add dev tun0 10.8.8.2/24
vpn       | 2021-10-20 00:44:21 /sbin/ip route add 104.111.100.109/32 via 192.168.144.1
vpn       | 2021-10-20 00:44:21 /sbin/ip route add 0.0.0.0/1 via 10.8.8.1
vpn       | 2021-10-20 00:44:21 /sbin/ip route add 128.0.0.0/1 via 10.8.8.1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-20 09:07:39

你的问题来自网络的错误配置。

首先,当您使用docker-compose up -d启动服务时,您将创建一个默认网络,其名称为该组合文件所在的文件夹的名称。你可以用docker network ls来检查它。

在默认情况下,所有服务都将连接到该网络,除非您定义了不同的默认或更改了网络模式,这是first的情况。

基本上,假设您的撰写文件位于一个名为myapp的目录下。

当您启动容器时,Docker正在创建一个名称为myapp-default.

  • Your services vpn的网络,second将加入该网络,但是first将使用来自使用vpn的相同网络名称空间的网络堆栈工作,它可以在使用服务名称时发现second而没有任何问题。

H 121因为first不在default网络中,d24无法发现它。H 225G 226

如果您想让first被second发现,您不应该使用相同的vpn网络堆栈,而应该让它加入由Compose创建的default网络(或者自己创建另一个网络,并让其中三个网络加入该网络)。

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

https://stackoverflow.com/questions/69639213

复制
相关文章

相似问题

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