【问题标题】:Allow docker swarm service to bind host ip interface允许 docker swarm 服务绑定主机 ip 接口
【发布时间】:2019-02-23 12:58:18
【问题描述】:

我创建了一个 go 脚本,用于在链接到我的 eno1 接口的 IP 之间切换。

如果我的程序执行curl --interface "51.15.xx.xx" ... 并在我的 3 个 IP 之间切换

下面是我的界面:

2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether ac:1f:6b:27:xx:xx brd ff:ff:ff:ff:ff:ff
inet 51.15.xx.xx/24 brd 51.15.21.255 scope global eno1
   valid_lft forever preferred_lft forever
inet 212.83.xx.x1/24 brd 212.83.154.255 scope global eno1
   valid_lft forever preferred_lft forever
inet 212.83.xx.x2/24 brd 212.83.154.255 scope global secondary eno1
   valid_lft forever preferred_lft forever

当他直接在主机上运行时,我的程序运行完美,他也在运行 docker run --network=host

但是在使用 docker swarm(部署在 1 个节点上)的生产环境中,我无法绑定主机网络并且我的程序无法运行。我得到错误:bind failed with errno 99: Address not available

我只想将host 网络与 swarm 服务上的本地范围绑定,或者允许我的 swarm 服务绑定主机 ip

PS:我已经尝试绑定网络主机,但是当我执行docker stack deploy 时,docker 选择了一个host 范围为 swarm 的网络。

最好的问候

【问题讨论】:

    标签: docker ubuntu networking devops docker-swarm


    【解决方案1】:

    您在声明 swarm 服务或堆栈时是否发布了端口?

    根据文档:

    如果您的容器或服务未发布任何端口,则主机网络无效。

    https://docs.docker.com/network/host/

    【讨论】:

    • 是的,我发布了 1 个端口
    【解决方案2】:

    尝试使用直接命令创建服务,例如:

    代码

    docker service create --network host caa06d9c/echo
    

    Docker 镜像不暴露任何端口

    检查

    curl localhost:8080
    

    输出

    {
        "method": "GET",
        "path": "/",
        "ip": "127.0.0.1"
    }
    

    所以端口连接到主机,可以从任何接口访问。

    【讨论】:

      猜你喜欢
      • 2017-01-18
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 2014-04-02
      • 2013-03-31
      • 2013-10-09
      • 2019-06-04
      • 1970-01-01
      相关资源
      最近更新 更多