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

如何从一个Docker容器内部连接到同一Docker主机上另一个Docker容器的端口?

吕扬
2023-03-14

在Ubuntu 20.04上运行新的Docker 20.10.1。此版本包括对主机的支持。码头工人。Linux上dockerd中的内部

root@docker04:~# docker --version
Docker version 20.10.1, build 831ebea

我在使用SSL证书的容器中运行了一系列服务,我想使用Telegraf(稍后发送到Grafana仪表板)检查证书是否过期。

所有带有网络接口和Telegraf的服务都运行在同一个Docker主机上。所有服务都在自己的网桥网络中。我想在端口9000上从Telegraf连接到Portainer(见下文)。

----------VM running docker (10.10.1.32)----------
|                                                |
|    --------------------                        |
|    | Gitea            |                        |     
|    | Ports: 3000:3000 |                        |
|    | Network: gitea   |                        |
|    --------------------                        |
|                                                |
|    ----------------------                      |
|    | Portainer          |                      |
|    | Ports: 9000:9000   |<--|                  |
|    | Network: portainer |   |                  |
|    ----------------------   |                  |
|                             |                  |
|    ---------------------    |                  |
|    | Telegraf          |    |                  |
|    | Network: telegraf |-->-                   |
|    |                   |                       |
|    ---------------------                       |
|                                                |
--------------------------------------------------

我以为有了对host.docker.internal的新支持,我将能够从一个容器连接到另一个容器,但这看起来不起作用。ping可以工作,但我不能连接到端口9000。

root@docker04:~# docker run -it --add-host host.docker.internal:host-gateway alpine /bin/sh
/ # ping host.docker.internal
PING host.docker.internal (172.17.0.1): 56 data bytes
64 bytes from 172.17.0.1: seq=0 ttl=64 time=0.102 ms
64 bytes from 172.17.0.1: seq=1 ttl=64 time=0.100 ms
^C
/ # telnet host.docker.internal 9000
telnet: can't connect to remote host (172.17.0.1): Operation timed out

telnet的最后一个命令挂起并最终断开连接。我在这里错过了什么吗?这只适用于主机网络吗?我显然误解了这里的Docker网络...

如果我也尝试使用主机的IP,它也会失败。

/ # telnet 10.10.1.32 9000
telnet: can't connect to remote host (10.10.1.32): Operation timed out

共有1个答案

彭英逸
2023-03-14

尝试在同一个网络上的所有容器上运行,或者在一个容器上映射两个网络,就像在1个容器上使用network1,network2一样,为什么您面临这个问题,因为您为每个容器使用不同的专用网桥网络。

 类似资料:
  • 我想在一个docker容器中运行Rabbitmq服务器,并使用芹菜从另一个容器连接到它(http://celeryproject.org/) 我已使用以下命令运行rabbitmq。。。 然后通过 当我试图做非常基本的教程来验证http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html 我得

  • 我正在尝试从另一个码头工人容器连接到 kafka docker 容器。但它没有连接。 为了运行kafka和zookeeper,我使用了docker compose文件: 容器docker compose 17138956372294708100 _ kafkatest . producer _ 1和docker compose 17138956372294708100 _ kafkatest .

  • 问题内容: 我有应用程序,使用过Tornado和tornado-redis。我开始[redis]中的[image“ app” 然后我想将我的应用程序与redis链接: 我有错误: 我已经用本地tornado和redis测试了我的代码,并且可以正常工作。问题在 为什么我的应用无法连接到Redis容器?如何解决?我使用标准端口6379。 谢谢! 问题答案: 尝试在上使用redis 。(请参见此处的源代

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

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

  • 问题内容: 我创建了我的第一个Docker容器,它使用Go运行服务器,但是无法从主机外部访问它。我刚开始使用docker,所以在这里有点迷路了。 因此,我有一个非常简单的Go代码来启动服务器,我构建了Docker映像,该映像安装了Go并在Linux基本映像中构建了代码。我在端口8080上运行服务器,因此我将该端口暴露给运行容器的主机,如下所示: 那行得通, 我可以通过docker的机器IP ( 启