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

Los*_*ost 7 docker docker-compose docker-swarm

我有两个Docker容器

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

现在,在本地Web api上是本地主机,控制台应用程序调用API没问题。但是,我不知道何时对这两种东西进行Docker化,我如何才能使Dockerized API的URL可用于Dockerized Console应用程序?

我认为我不需要Docker Compose,因为我将API的Url作为API的参数传递,因此确保Dockerized API'sURL可被Dockerized Console

有任何想法吗?

JSS*_*JSS 11

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

给定:数据提供者服务,数据消费者服务

  • 选项 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

Run Code Online (Sandbox Code Playgroud)

确保http://data-provider-service:8081/在您的data-consumer-service.

  • 选项 2:使用 Docker Compose

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

data-consumer-service:
  depends_on:
    - data-provider-service
     
Run Code Online (Sandbox Code Playgroud)

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


lan*_*ng2 6

您可以使用该link选项docker run

运行 API:

docker run -d --name api api_image
Run Code Online (Sandbox Code Playgroud)

运行客户端:

docker run --link api busybox ping api
Run Code Online (Sandbox Code Playgroud)

您应该会看到api可以通过 docker 解决。

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


Ima*_*gmi 6

如果使用撰写功能,这个问题就可以轻松解决。使用 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
Run Code Online (Sandbox Code Playgroud)

要使其运行,只需up这样调用:

docker-compose up 
Run Code Online (Sandbox Code Playgroud)

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

成功!

  • 所以要理解,我们想要从一个 docker 容器到另一个 docker 容器中的服务进行 Web 调用,上面是一种解决方案吗?这实际上没有任何意义。需要多解释一下。 (16认同)

Von*_*onC 5

这个想法不是传递URL,而是传递您要调用的另一个容器的主机名。
请参阅撰写网络

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

这就是替换不推荐使用的--link选项的方法

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