【问题标题】:docker-compose can not use private IPdocker-compose 不能使用私有 IP
【发布时间】:2017-12-14 00:57:37
【问题描述】:

我正在尝试在 docker-compose 中运行 2 个容器。我的 docker-compose.yml 是:

version: '2'
services:

  consul:
    image: "consul:0.8.3"
    hostname: "consul"
    command: "agent -server -client=0.0.0.0 -retry-join=10.30.1.97 -retry-join=10.30.1.42 -bootstrap-expect=3 -ui"
    ports:
      - "8400:8400"
      - "8500:8500"
      - "8300:8300"
      - "8600:53/udp"
  vault:
    depends_on:
      - consul
    image: "vault"
    hostname: "vault"
    links:
      - "consul:consul"
    environment:
      VAULT_ADDR: http://127.0.0.1:8200
    ports:
      - "8200:8200"
    volumes:
      - ./tools/wait-for-it.sh:/wait-for-it.sh
      - ./config/vault:/config
      - ./config/vault/policies:/policies
    entrypoint: /wait-for-it.sh -t 20 -h consul -p 8500 -s -- vault server -config=/config/with-consul.hcl

我一开始就遇到的问题是 consul 容器没有使用 IP 10.30.1.134(主机的 IP) 相反,它使用的是我认为的桥接网络:

2017/07/10 10:09:12 [INFO] raft: Node at 172.18.0.2:8300 [Follower] entering Follower state (Leader: "")

如何强制它使用 10.30.1.134?

eth0 链路封装:以太网 HWaddr 06:f5:74:4c:ad:9e
inet 地址:10.30.1.134 广播:10.30.1.255 掩码:255.255.255.0 inet6 地址:fe80::4f5:74ff:fe4c:ad9e/64 范围:链接 UP BROADCAST RUNNING MULTICAST MTU:9001 Metric:1 RX 数据包:9907809 错误:0 丢弃:0 超限:0 帧:0 TX 数据包:17142864 错误:0 丢弃:0 超限:0 运营商:0 碰撞:0 txqueuelen:1000 RX 字节:1328463684 (1.3 GB) TX 字节:2178517759 (2.1 GB)

【问题讨论】:

    标签: docker consul


    【解决方案1】:

    Docker compose 默认在 docker 环境中创建自己的网络。因此,回答您的问题 - 要使用您应该使用的主机网络:

    network_mode: "host"
    

    如此处所述:https://docs.docker.com/compose/compose-file/compose-file-v2/

    但这很少是您真正需要的。您定义的端口映射已经在主机和容器之间创建了端口转发。例如。 host_machine_ip:8200 将被转发到您的保管库容器。通过这种方式,您可以决定具体公开哪些端口。

    【讨论】:

    • 我的问题不是 consul 和 vault 容器之间的通信。我在第二台和第三台服务器上启动了模拟 docker-compose.yml,它们无法相互通信,因为 conusul 不使用 10.30.1.0 网络
    • 您的端口绑定会在 0.0.0.0 上公开这些端口,因此它们应该可以完全访问。检查你的防火墙。您还可以在特定接口上公开端口(而不是像默认情况下那样在所有接口上公开)。例如。 ports: - "10.30.1.134:8400:8400"
    • 试过了 - 不工作:consul_1 | Client Addr: 0.0.0.0 (HTTP: 8500, HTTPS: -1, DNS: 8600) consul_1 | Cluster Addr: 172.18.0.2 (LAN: 8301, WAN: 8302) 集群地址在桥接网络,其他节点无法访问
    • * Failed to join 10.30.1.97: dial tcp 10.30.1.97:8301: getsockopt: connection refused
    • 这不是与 docker 相关的问题。正如 docker 在这里所做的那样。无论如何,您正在连接到 8301 并且您没有公开该端口。将"8301:8301" 添加到ports。您还可以通过 -bind 参数将集群绑定到不同的 ip。不过貌似8302已经用于广域网通信了,你也可以试试暴露使用。
    猜你喜欢
    • 2021-06-27
    • 2021-09-01
    • 1970-01-01
    • 2015-05-17
    • 2018-01-15
    • 2021-03-26
    • 2021-06-20
    • 2021-01-24
    • 1970-01-01
    相关资源
    最近更新 更多