You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker中以openssl s_server为ENTRYPOINT无法正常工作的问题

问题分析与解决

核心原因

openssl s_server默认是单连接模式:处理完一个客户端连接(包括TLS握手完成、交互结束或客户端主动断开)后,进程会立即退出。

当它作为容器的PID 1进程(通过ENTRYPOINT启动)时,进程退出会直接触发容器停止,因此你尝试连接时,刚完成握手服务器就退出,容器随之终止,表现为“连接失败”。

而通过docker exec在容器内启动的openssl s_server不是PID 1,进程退出不会影响容器运行,因此你可以正常完成一次连接交互,直到断开后进程才退出,看起来连接成功。

解决方案

在openssl s_server的启动参数中添加-forever选项,让服务器处理完单个连接后不退出,持续监听新连接:

修改Docker Compose的command配置:

command: s_server -debug -CAfile /sshfiles/rootCA.crt -key /sshfiles/usage.key -cert /sshfiles/usage.crt -port 9998 -Verify 3 -verify_return_error -forever

如果需要保持单连接逻辑但避免容器随进程退出,可以用tini这类轻量进程管理器包裹启动命令,但-forever是最直接解决问题的方式。

验证步骤

  1. 修改配置后重启容器:docker compose up -d tlstcp
  2. 用s_client连接服务器,此时连接建立后不会立即中断,可正常交换文本
  3. 断开连接后,服务器会继续监听,容器保持运行状态

补充说明

  • 本地直接运行openssl s_server时,因为它不是系统PID 1,进程退出不会影响系统,所以你感觉“正常工作”,但实际上它同样是处理一次连接就退出,只是你可以随时重新启动。
  • 容器的PID 1进程有特殊的生命周期特性:进程退出会直接终止容器,这是Linux容器的基础机制。

内容的提问来源于stack exchange,提问作者JeanMarc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 15:29:55