一个 Docker 容器如何调用另一个 Docker 容器
How can one Docker container call another Docker container
我有两个 Docker 个容器
- 一个网站API
- 调用 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
我有两个 Docker 个容器
- 一个网站API
- 调用 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
.
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