首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过tcp连接到docker容器时外国主机关闭的连接

通过tcp连接到docker容器时外国主机关闭的连接
EN

Stack Overflow用户
提问于 2022-06-18 20:05:35
回答 1查看 1.1K关注 0票数 2

我有一个奇怪的问题,连接到码头集装箱通过tcp。

我的操作系统是Ubuntu 20.04

我做了什么。

我在一个容器中启动我的web服务器。我试过正式的Postgresql映像,问题依然存在。所以问题可能不是我的形象。

它监听端口8080上的0.0.0.0。我已经换了好几次端口了,所以不只是8080。

我在主机上将8080集装箱港口转发到8080。我试过把货物转到不同的港口,但问题仍然存在。

这是命令

docker run -rm-命名我的web容器-p8080:8080 my-web映像

尝试将wget localhost:8080挂起一段时间,然后说

连接被外国主机关闭.

telnet localhost 8080工作了一段时间,然后说了同样的话。

代码语言:javascript
复制
# telnet localhost 8080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

如果我从容器中wget :8080,一切都很好。

如果我将-net=host添加到命令中,启动容器,问题就解决了。

所以我想码头网络有问题。我总是可以使用-net=host,但这显然会带来问题。

这件事突然出现了,我什么也没做。没有系统配置,没有安装新软件。

EN

回答 1

Stack Overflow用户

发布于 2022-06-18 20:05:35

我试过了

代码语言:javascript
复制
docker network inspect bridge

这就说明了以下情况。

代码语言:javascript
复制
[
    {
        "Name": "bridge",
        "Id": "0e99160be59fd6417984db68695f6e6d4fa016e1d75a26734bccaff427ea6468",
        "Created": "2022-06-08T11:16:47.413799955+03:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,

        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

我注意到了这一部分

代码语言:javascript
复制
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]

172.17.0.0看上去像是我的互联网提供商给我的ip地址。

我想也许我应该给网络另一个地址。所以我把/etc/docker/daemon.json

代码语言:javascript
复制
{
 "experimental": true
}

代码语言:javascript
复制
{
 "experimental": true,
  "default-address-pools" :
      [
         {
           "base":"172.26.0.0/16",
           "size":24
         }
      ]
}

然后运行服务停靠器重新启动

从那以后问题就消失了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72672412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档