【问题标题】:How can one Docker container call another Docker container一个 Docker 容器如何调用另一个 Docker 容器
【发布时间】:2017-05-31 04:42:13
【问题描述】:

我有两个 Docker 容器

  1. Web API
  2. 调用 Web API 的控制台应用程序

现在,在我的本地 web api 上,本地主机和控制台应用程序调用 API 没有问题。但是,我不知道这两个东西什么时候被 Dockerized,我怎么可能使 Dockerized API 的 Url 可用于 Dockerized Console申请?

我认为我不需要 Docker Compose,因为我将 API 的 Url 作为 API 的参数传递,因此只需确保 Dockerized API's url 可由 Dockerized Console 访问

有什么想法吗?

【问题讨论】:

  • 你有没有解决这个问题?似乎在容器 A 上运行的服务应该可以对容器 B 进行网络调用。我不知道为什么 docker-compose.yml 的以下答案是公认的解决方案,但它不应该是。

标签: docker docker-compose docker-swarm


【解决方案1】:

这个想法不是传递 url,而是传递您要调用的另一个容器的主机名。
Networking in Compose

默认情况下,Compose 会为您的应用设置一个网络。服务的每个容器都加入默认网络,并且该网络上的其他容器都可以访问它们,并且它们可以通过与容器名称相同的主机名发现。

这是替换 deprecated --link option 的内容。

如果您的容器未在单个 Docker 服务器节点上运行,Docker Swarm Mode 将启用跨多个节点的可发现性。

【讨论】:

    【解决方案2】:

    您可以将link 选项与docker run 一起使用:

    运行 API:

    docker run -d --name api api_image
    

    运行客户端:

    docker run --link api busybox ping api
    

    你应该看到api可以被docker解析。

    也就是说,使用docker-compose 仍然是一个更好的选择。

    【讨论】:

    【解决方案3】:

    如果使用撰写功能,问题可以很容易地解决。使用 compose,您只需创建一个配置文件 (docker-compose.yml),如下所示:

    version: '3'
    services:
      db:
        image: postgres
      web:
        build: .
        command: python3 manage.py runserver 0.0.0.0:8000
        volumes:
          - .:/code
        ports:
          - "8000:8000"
        depends_on:
          - db
    

    要让它运行,只需像这样调用up

    docker-compose up 
    

    这是运行所有堆栈的最佳方式,因此,请查看此参考: https://docs.docker.com/compose/

    成功了!

    【讨论】:

    • 所以要理解,我们想从一个 docker 容器向另一个 docker 容器中的服务进行 Web 调用,以上是解决方案吗?从字面上看,这没有任何意义。需要解释更多。
    • 需要更多解释它是如何成为正确答案的
    【解决方案4】:

    这是我发现在本地机器/单个集群中连接多个容器的最佳方式。

    鉴于:数据提供者服务、数据消费者服务

    • 选项 1:使用网络
    docker network create data-network
    docker run --name=data-provider-service --net=data-network -p 8081:8081 data-provider-image
    docker run --name=data-consumer-service --net=data-network -p 8080:8080 data-consumer-image
    
    

    确保在您的data-provider-service 中使用诸如http://data-provider-service:8081/ 之类的URI。

    • 选项 2:使用 Docker Compose

    您可以在 docker-compose.yml 文件中定义这两个服务,并在 data-provider-service 中使用 depends_on 属性。 例如

    data-consumer-service:
      depends_on:
        - data-provider-service
         
    

    您可以在我的 Medium 帖子中查看更多详细信息:https://saggu.medium.com/how-to-connect-nultiple-docker-conatiners-17f7ca72e67f

    【讨论】:

      猜你喜欢
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多