一个Docker容器如何调用另一个Docker容器

一个Docker容器如何调用另一个Docker容器,docker,docker-compose,docker-swarm,Docker,Docker Compose,Docker Swarm,我有两个码头集装箱 Web API 调用Web API的控制台应用程序 现在,在我的本地web api是本地主机,控制台应用程序调用api没有问题。但是,我不知道这两件事何时被对接,我怎么可能使对接api的Url对对接控制台应用程序可用 我不认为我需要Docker Compose,因为我将API的Url作为API的参数传递,所以这只是确保Docked API的Url可由Docked Console访问的问题 有什么想法吗?想法不是传递url,而是传递要调用的另一个容器的主机名。 看 默认情况下,

我有两个码头集装箱

  • Web API
  • 调用Web API的控制台应用程序
  • 现在,在我的本地web api是本地主机,控制台应用程序调用api没有问题。但是,我不知道这两件事何时被对接,我怎么可能使对接api的Url对对接控制台应用程序可用

    我不认为我需要Docker Compose,因为我将API的Url作为API的参数传递,所以这只是确保
    Docked API的
    Url可由
    Docked Console访问的问题


    有什么想法吗?

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

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

    这就是替代的原因


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

    您可以使用
    链接
    选项和
    Docker run

    运行API:

    docker run -d --name api api_image
    
    运行客户端:

    docker run --link api busybox ping api
    
    您应该看到,
    api
    可以由docker解析


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

    如果使用compose功能,这个问题可以很容易地解决。使用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
    
    docker-compose up 
    
    要使其运行,只需按如下方式调用
    up

    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
    
    docker-compose up 
    
    这是运行所有堆栈的最佳方式,因此,请检查以下参考:


    成功

    只是提醒一下:容器链接现在已经被弃用,取而代之的是用户定义的网络。这一点没有解释。从一个服务,我想打一个电话,像”“对另一个人。这是一个怎样的解决方案呢?为了理解,我们想从一个docker容器向另一个docker容器中的服务进行web调用,而上述就是一个解决方案?这毫无意义。需要更多的解释。需要更多的解释如何才能成为一个正确的答案你曾经解决过这个问题吗?在容器a上运行的服务似乎可以对容器B进行web调用。我不知道为什么下面docker-compose.yml的答案是公认的解决方案,但不应该是。