首页 > 解决方案 > 使用 docker 中的桥接网络将服务绑定到特定接口时连接被拒绝

问题描述

这是我的码头工人撰写:

version: '3.1'

services:
  service1:
    image: alpine/socat
    command: TCP-LISTEN:9999,bind=127.16.1.10 SYSTEM:"echo lol"

    networks:
      network1:
        ipv4_address: 172.16.1.10

  service2:
    image: alpine/socat
    entrypoint: ''
    command: sh -c 'sleep 2 && ping -c 1 172.16.1.10 && socat - TCP4:172.16.1.10:9999'
    depends_on: 
      - service1

    networks:
      - network1


networks:
    network1:
        driver: bridge
        ipam:
            driver: default
            config:
                - subnet: 172.16.1.0/24

两个服务共享network1网络,service1获取 ip 172.16.1.10 并且 socat 绑定到这个 ip。

如果我运行:

$ docker-compose run service2
Creating network "docker_network1" with driver "bridge"
Creating docker_service1_1 ... done
PING 172.16.1.10 (172.16.1.10): 56 data bytes
64 bytes from 172.16.1.10: seq=0 ttl=64 time=0.197 ms

--- 172.16.1.10 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.197/0.197/0.197 ms
2020/06/07 16:06:15 socat[1] E connect(5, AF=2 172.16.1.10:9999, 16): Connection refused

Socat不接受连接。

如果我将绑定更改为 0.0.0.0,它可以工作,但我不想绑定到所有接口,我为此目的使用网络,如果我不能在特定接口上绑定我的服务,这是没有意义的。

在 Docker 中是不可能的,还是我做错了?

标签: dockernetworking

解决方案


推荐阅读