Docker到主机的TCP连接在5分钟后断开



我有一个在Windows 10的docker桌面中运行的CentOS 7。我正在从docker内部连接到运行在Windows 10上的Oracle 12c。如果空闲,连接将在大约5分钟后断开。我怎么拍这个?

我在Docker中运行一个python应用程序时遇到了同样的问题,该应用程序与第三方应用程序的TCP连接。当在Linux上的Python中运行时,该应用程序保持了不确定的空闲TCP连接,但在Docker容器中运行的同一应用程序在正好5分钟时就断开了空闲连接。

我读过关于空闲TCP连接如何/为什么会在Docker中丢失的相互矛盾的信息(也许有人可以给出明确的答案(,尽管如此,我还是找到了一个对我有效的解决方案。

解决方案分为两部分:一部分是Docker Compose YML配置的更改,另一部分是应用程序代码本身的更改。

首先,我在应用程序的Docker Compose yml文件中添加了sysctls选项:

app:
image: myImage:latest
sysctls:
- net.ipv4.tcp_keepalive_time=200

这将更改映像的默认Linux设置(我相信默认值是600(。

其次,我配置了应用程序的TCP套接字代码,以引用TCP Keepalive值。在我的例子中,使用Python,它看起来是这样的:

socket_obj.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)

这个套接字选项与C++中的类似。

希望这能帮助你和/或其他被这件事绊倒的人。

最新更新