栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

macOS 10.12上两个Docker容器之间的通信

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

macOS 10.12上两个Docker容器之间的通信

每个容器都有自己的本地主机

每个服务都在其自己的容器中运行。从Ubuntu容器的角度来看,redis未监听localhost。

使用Docker网络

为了使您的容器进行通信,它们应该在同一Docker网络上。这包括三个步骤:

  1. 创建一个Docker网络
  2. 提供您的容器名称
  3. 将容器连接到您创建的网络

完成此操作后,容器可以使用其名称彼此对话,就好像它们是主机名一样。

剥皮这只猫的方法不止一种…我将在这个答案中介绍两种,但是我可能还不了解其他几种方法(例如,使用Kubernetes或Swarm)。

手工做

您可以使用

docker network
命令为此应用程序创建网络。

# Show the current list of networksdocker network ls# Create a network for your appdocker network create my_redis_app

运行redis容器时,请确保它具有名称,并且在此网络上。如果需要(可以使用

-p
),可以在外部(对macOS)公开端口,但这仅是其他容器与redis对话所必需的。

docker run -d -p 6379:6379 --name redis_server --network my_redis_app <IMAGE ID>

现在运行您的Ubuntu容器。您也可以随意命名,但是在此示例中我不会打扰,因为该示例未运行任何服务。

docker run -it --network my_redis_app ubuntu bash

现在,从Ubuntu容器内部,您应该可以使用name来访问redis

redis_server
,就像它是DNS名称一样。

使用撰写来做

我倾向于使用Compose构建这样的设置,因为将其写入YAML文件(IMO)更容易。这是上面的示例,以docker-compose.yml格式重写:

version: '2'services:  redis:    image: <IMAGE ID>    networks:      - my_redis_app    ports: 6379:6379  ubuntu:    image: ubuntu:latest    networks:      - my_redis_appnetworks:  my_redis_app:    driver: bridge

有了这个,您就可以

docker-compose up -dredis
使用特定的Docker网络运行并使Redis服务联机。如果网络尚不存在,则Compose会为您创建网络。

以这种方式运行Ubuntu容器的意义不大……当然是交互式的。但是我认为一旦进行了Redis操作,您将添加某种应用程序容器,也许还会添加一个像nginx这样的Web代理…也只需将其他代理置于其中

services
,就可以将它们全部管理在一起。

由于

ubuntu
是交互式的,因此可以以交互方式运行它:

# without -d, container is run interactivelydocker-compose run ubuntu bash

现在,在Ubuntu中,您应该能够使用其名称连接到Redis,在此示例中,该名称仅为

redis



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372899.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号