当前位置: 首页 > 知识库问答 >
问题:

一个容器中的容器与多容器容器中的容器通信

楚昀
2023-03-14

>

  • 我正试图弄清楚Kubernetes中的网络,尤其是多集装箱吊舱的处理。在我的简单场景中,我总共有3个豆荚。其中一个有两个容器,另一个只有一个容器,它希望与多容器吊舱中的特定容器通信。我想弄清楚kubernetes如何处理此类容器之间的通信。

    为此,我在一个“sidecar体系结构”中有一个简单的多容器吊舱,YAML文件如下所示:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
     - name: nginx-container
        image: nginx
        ports:
        - containerPort: 80
     - name: sidecar
        image: curlimages/curl
        command: ["/bin/sh"]
        args: ["-c", "echo Hello from the sidecar container; sleep 300"]
        ports:
        - containerPort: 5000
    

    >

  • 我想用这个YAML文件实现的是,在pod“nginx”中,有两个容器,一个运行nginx并侦听该pod的端口80,另一个运行一个简单的curl映像(任何与nginx不同的东西,以不违反kubernetes的每个pod的一个容器约定),并可以侦听pod端口5000上的通信。

    然后我有另一个YAML文件再次运行一个nginx映像。这个容器将尝试与nginx通信,并在另一个吊舱上卷曲图像。YAML文件如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-simple
      labels:
        app: nginx
    spec:
      containers:
     - name: nginx-container
        image: nginx
        ports:
        - containerPort: 80
    

    >

  • 部署豆荚后,我只需使用以下命令公开nginx豆荚:

    提前谢了。

    附注:我也很高兴听到你对这个主题的学习材料的建议。太感谢你了。

  • 共有1个答案

    汲睿
    2023-03-14

    curl是一个命令行工具。它不是监听端口的服务器,而是可用于访问服务器的客户端工具。

    此容器不包含侦听端口的服务器:

     - name: sidecar
       image: curlimages/curl
       command: ["/bin/sh"]
       args: ["-c", "echo Hello from the sidecar container; sleep 300"]
       ports:
       - containerPort: 5000
    

    部署在Kubernetes上的服务通常是包含某种形式的webserver的容器,但也可能是其他类型的服务。

    我建议您将两个WebServer(例如,两个nginx容器)添加到一个POD中。但是它们必须监听不同的端口,例如端口8080和端口8081。客户端可以通过使用Pod IP和容器端口 : 来选择它想要与之交互的容器。例如。添加两个nginx-container,将它们配置为侦听不同的端口,并让它们服务不同的内容。

     类似资料:
    • 我对javaee/EJB比较陌生,我已经读了很多关于javaee容器的书。我有使用web容器(JBoss中的WAR文件)的经验。我还知道JBoss也可以用作JavaEE容器。 JavaEE容器和Web容器之间的区别是什么? 我知道JavaEE也能够包含一个。战争档案。它们不同吗?它们的区别是什么?是否有特定于供应商的偏好,哪一个更好?

    • Docker中容器网络不通,宿主机跟容器,容器跟docker0,容器跟容器网络都不通? 使用 tcpdump -i docker0 抓包时容器的网络就通了,但是关闭 tcpdump -i docker0容器的网络又不通了。

    • 我是docker的新手。我在windows 10上使用docker for windows。我创建了一个docker容器应用程序(spring boot),该应用程序需要与rabbitmq通信-这也是在一个容器中。他们都使用相同的docker网络(默认网桥网络),但当我尝试连接到rabbitmq(端口5672)时,连接被拒绝。我使用的是容器IP(rabbitmq为172.17.0.2)。如果我在d

    • 我正在尝试以下操作: 在一个带有暴露端口的容器中旋转MySQL 5.5,例如4200。 在一个带有暴露端口的容器中旋转MySQL 5.7,例如4300。 旋转golang容器以运行我的应用程序。 我的想法是我需要我的测试在不同的数据库版本上运行。 为此,我需要能够与golang容器中的每个sql容器进行对话。 我试过的: 方法1-使用--link: GO LANG应用程序容器 方法2-使用--ne

    • 问题内容: 我基于两个不同的图像创建了两个docker容器。一个数据库,另一个用于网络服务器。这两个容器都在我的Mac OS X上运行。 我可以从主机访问数据库容器,也可以从主机访问Web服务器。 但是,如何从Web服务器访问数据库连接? 我启动数据库容器的方式是 我开始了wls容器作为 我可以通过连接到主机上的数据库 我可以以以下方式访问主机上的wls: 问题答案: 最简单的方法是使用–link

    • 我基于两个不同的映像创建了两个docker容器。一个是db,另一个是WebServer。这两个容器都在我的mac OSX上运行。 我可以从主机访问db容器,也可以从主机访问webserver。 我可以访问主机上的wls作为