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

时间:2017-05-31 04:42:14

标签: docker docker-compose docker-swarm

我有两个Docker容器

  1. Web API
  2. 调用Web API的控制台应用程序
  3. 现在,在我的本地web api上是本地主机,Console应用程序调用API没有问题。但是,我不知道这两件事何时是Docker化的,我怎样才能使Dockerized API的Url可用于Dockerized Console应用

    我认为我不需要Docker Compose,因为我将API的Url作为API的参数传递,因此只需要确保Dockerized API's url可以通过{{Dockerized Console来访问1}}

    有什么想法吗?

4 个答案:

答案 0 :(得分:4)

您可以将link选项与docker run

一起使用

运行API:

docker run -d --name api api_image

运行客户端:

docker run --link api busybox ping api

您应该看到Docker可以解析api

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

答案 1 :(得分:2)

我们的想法不是传递网址,而是要传递其他容器的主机名 见Networking in Compose

  

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

这就是取代deprecated --link option

的原因

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

答案 2 :(得分:2)

如果使用撰写功能,可以轻松解决问题。使用compose,您只需创建一个配置文件(ActiveSheet.Range("B:B").Replace "Global Macro", "GM"),如下所示:

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

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

成功!

答案 3 :(得分:0)

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

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

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

确保在您的 http://data-provider-service:8081/ 中使用类似的 URI:data-provider-service

  • 选项 2:使用 Docker Compose

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

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

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