代码之家  ›  专栏  ›  技术社区  ›  Héctor

链接Docker容器时Ubuntu无法到达主机

  •  0
  • Héctor  · 技术社区  · 6 年前

    我有3个码头化服务。服务A和B在同一Docker撰写文件中运行:

    docker-compose.yml公司

    version: '3.5'
    services:
      service_a:
        container_name: service_a
        networks:
          - my_net
      service_b:
        container_name: service_b
        networks:
          - my_net
    networks: #This is just because I wanted to change the network default name
      my_net:
        name: my_net
    

    服务C需要对服务A和B提出请求,但是它使用Docker单独运行,而不使用compose(这是因为我正在通过 --network 选择权。因此,我运行服务C链接A和B:

    docker run --network my_net --link service_a --link service_b service_c_docker_image
    

    这是在MacOS上工作,但不是在Ubuntu!

    如果我运行ping命令,而不是默认的service-docker-image命令:

    docker run --network my_net --link service_a --link service_b service_c_docker_image ping service_a
    

    在MacOS上,主机已正确到达;在Ubuntu上,我得到: ping: service_a: Name or service not known . 同样 service_b .

    两台机器都使用相同版本的Docker和Docker Compose。

    我错过了什么?

    2 回复  |  直到 6 年前
        1
  •  1
  •   MarkAWard    6 年前

    您的问题中可能有错别字,因为撰写文件根本不应该运行,服务级别的网络名称 my_net 应与顶级网络名称匹配,然后可以使用 name: intra_net . 网络设置在 docker run 命令应与顶层网络部分中重命名的网络相匹配(并且该网络需要已经存在,因此请首先运行合成堆栈)。

    工作示例:

    docker-compose.yaml文档

    version: '3.5'
    services:
      service_a:
        image: odise/busybox-curl
        command: ["curl", "-s", "service_b:5678"]
        depends_on:
          - service_b
        networks:
          - my_net
      service_b:
        image: hashicorp/http-echo
        command: ["-text", "hello world"]
        networks:
      - my_net
    networks:
      my_net:
        name: infra_network
    

    运行服务 docker-compose up -d 检查日志:

    > docker-compose logs
    Attaching to docker-compose-networks_service_a_1, docker-compose-networks_service_b_1
    service_b_1  | 2019/01/06 05:53:55 Server is listening on :5678
    service_b_1  | 2019/01/06 05:53:55 service_b:5678 172.19.0.3:46900 "GET / HTTP/1.1" 200 12 "curl/7.39.0" 106.6µs
    service_a_1  | hello world
    

    然后用Docker启动另一个容器

    > docker run --network infra_network odise/busybox-curl curl -s service_b:5678
    hello world
    
        2
  •  0
  •   Héctor    6 年前

    愚蠢的我。实际上,我的配置是正确的,但是服务A和B没有运行,因为应用程序级错误,所以链接没有工作。