【问题标题】:Running a docker container in the same network as already running container在与已运行容器相同的网络中运行 docker 容器
【发布时间】:2021-12-10 17:51:49
【问题描述】:

我正在测试同一网络“myNetwork”中的两个容器(tomcat 和busybox)是否能够相互通信。

我按照以下步骤操作:

  1. 创建一个网络,“myNetwork”

    docker network create -d bridge myNetwork

  2. 在“myNetwork”中运行一个“myTomcat”容器

    docker run -it --name myTomcat --net=myNetwork tomcat

  3. 在与“myTomcat”网络相同的网络中运行“busybox”容器。即“我的网络”

    docker run -it --net=container:myTomcat busybox

  4. 使用 wget 命令测试是否可以从busybox容器访问tomcat容器

    docker container exec -it {busybox_container_id}

    /# wget localhost:8080

我在这里遇到错误wget: server returned error: HTTP/1.1 404

我想知道为什么我无法从busybox 容器连接到tomcat 容器,即使我在同一个网络中配置了两个容器。 所以我通过做检查:

    docker network inspect myNetwork
[
  {
    "Name": "myNetwork",
...
    "Containers": {
      "43ba4d7ae27753f8085f5697cf6afc4eb872dbdbd2cf18138e3c6e3f90d54d15":{
        "Name": "myTomcat",
        "EndpointID":"03a98...",
...
        "IPv4Address": "172.20.0.2/16",
        "IPv6Address": ""
    }
 }
]
 
    docker inspect {tomcat_container_id}
[
...
  "Networks": {
    "myNetwork": {
      "NetworkID": "54bf...",
      ...
      "Gateway": "172.20.0.1",
      "IPAddress": "172.20.0.2"
      ...
    }
...
]
    docker inspect {busybox_container_id}
[
...
  "NetworkSettings": {
    "Bridge": "",
    ...
    "Networks": {}
  }
...
]

tomcat 似乎在“myNetwork”中,但检查busybox 容器似乎没有显示任何网络信息。感谢您的帮助

【问题讨论】:

  • 如何从busybox 连接到tomcat?通过名称还是 IP?
  • 如果您收到 HTTP 404 错误,则说明您已成功连接,问题可能是您尚未将任何 .war 文件加载到 Tomcat 中。话虽如此,--net=container:... 构造确实不寻常;为什么要进行这种特殊设置?
  • @DavidMaze 你是对的。在 tomcat 容器的 $CATALINA_HOME/webapps/ROOT/index.html 中创建 index.html 后,我能够从 busybox 容器中“wget localhost:8080”并下载 index.html 文件。我正在尝试 --net=container:... 命令只是为了学习目的,而我正在学习 docker 中的一些基本网络命令。谢谢。
  • @Saeed 我的测试用例假设busyboxtomcat 容器在同一个网络中。因此,您可以通过简单的localhost:8080myTomcat:8080 连接到正在运行的tomcat 服务器,正如 AymDev 回答的那样。
  • 此外,从 Tomcat 版本 7 开始,默认的 tomcat webapps 目录已移至 webapps.dist,防止在 tomcat 实例启动时立即加载 tomcat 默认页面。 stackoverflow.com/questions/61972819/…

标签: docker docker-networking


【解决方案1】:

使用localhost 总是指向当前机器。在 Docker 容器中使用它以当前容器为目标。

如果您需要容器在 Docker 网络中进行通信,您可以通过将 容器名称 用作 主机名 来使用嵌入式 DNS 服务器>。当您将 Tomcat 容器命名为 myTomcat 时,您应该可以这样做:

wget myTomcat:8080

【讨论】:

  • 感谢您的回答。我发现我的HTTP 404 error不是因为我无法访问tomcat服务器,而是因为运行的tomcat服务器根本没有在$CATALINA_HOME/webapps/ROOT目录下配置默认的index.html页面。在 tomcat 容器目录中创建 index.html 后,我能够从 busybox 容器中访问 wget myTomcat:8080wget localhost:8080 也可以正常工作,因为我认为两个容器都在同一个网络中。
  • @lophih 哦,这可能是因为您定义busybox 容器网络的方式。我从来没有使用过--net=container:...,甚至没有单独使用过--net。这不是很常见。我猜这个语法就像容器之间的主机网络,因为localhost 没有办法指向另一个容器,除非它继承了它的网络接口。如果您想获得更多 "标准" 设置,您可以像为 Tomcat 一样将busybox 容器添加到网络,那么我认为您将能够测试localhost:8080 赢了不行,但myTomcat:8080 会。
猜你喜欢
  • 1970-01-01
  • 2022-01-24
  • 2019-08-25
  • 2021-07-16
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
相关资源
最近更新 更多