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

How can one Docker container call another Docker container

我有两个 Docker 个容器

  1. 一个网站API
  2. 调用 Web 的控制台应用程序 API

现在,在我的本地网络上 api 是本地主机,控制台应用程序调用 API.However 没有问题,我不知道这两个东西什么时候 Dockerized,如何我可以使 Dockerized API 的 Url 可用于 Dockerized 控制台应用程序吗?

我认为我不需要 Docker Compose,因为我将 API 的 Url 作为 API 的参数传递,所以这很重要确保 Dockerized API's url 可以被 Dockerized Console

访问

有什么想法吗?

我们的想法是不传递 url,而是要调用的其他容器的主机名。
参见 Networking in Compose

By default Compose sets up a single network for your app. Each container for a service joins the default network and is both reachable by other containers on that network, and discoverable by them at a hostname identical to the container name.

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

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

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

运行 API:

docker run -d --name api api_image

运行 客户:

docker run --link api busybox ping api

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

也就是说,docker-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

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

docker-compose up 

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

成功!

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

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

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

中使用如下 URI:http://data-provider-service:8081/
  • 选项 2:使用 Docker 撰写

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

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

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