Docker Host网络下Steam专用服务器连接失败问题求助
Docker部署自研多人游戏Steam专用服务器无法登录Steam的问题
我正在为自研多人游戏部署Docker化的Steam专用服务器,相关配置如下:
Dockerfile
FROM ubuntu:22.04 RUN useradd -m steam COPY --chown=steam:steam LinuxServer /home/steam/ COPY --chown=steam:steam steamclient.so /home/steam/.steam/sdk64/steamclient.so USER steam WORKDIR /home/steam CMD ./Server.sh
docker-compose.yml
services: server: image: server network_mode: host
启动容器后,专用服务器无法登录Steam,日志呈现两种矛盾现象:
正常连接测试日志(Steam/logs/connection_log.txt)
[2022-10-11 10:04:10] Connectivity test: Starting test, fetching 'http://test.steampowered.com/204' [2022-10-11 10:04:10] Connectivity test: OK! [2022-10-11 10:04:10] Connectivity test: result=Connected (since 0.0s ago), prev=Unknown, in progress=0 [2022-10-11 10:04:22] Connectivity test: Starting test, fetching 'http://test.steampowered.com/204' [2022-10-11 10:04:22] Connectivity test: OK! [2022-10-11 10:04:22] Connectivity test: result=Connected (since 11.5s ago), prev=Unknown, in progress=0 [2022-10-11 10:04:23] Connectivity test: Starting test, fetching 'http://test.steampowered.com/204' [2022-10-11 10:04:23] Connectivity test: OK!
错误日志(Steam/logs/connection_log_7777.txt)
[2022-10-11 10:04:10] IPv6 HTTP connectivity test (ipv6check-http.steamcontent.com / [2a01:bc80:8:103::9b85:fc12]:80 ([2a01:bc80:8:103::9b85:fc12]:80)) - TIMEOUT [2022-10-11 10:04:12] IPv6 UDP connectivity test (ipv6check-udp.steamcontent.com / 2a01:bc80:a:100::b919:b604) - TIMEOUT [2022-10-11 10:04:21] [0,0] SetSteamID( [G:1:0] ) [2022-10-11 10:04:21] CCMInterface::YieldingConnect -- calling ISteamDirectory/GetCMListForConnect web api [2022-10-11 10:04:21] [0,0] SetSteamID( [G:1:0] ) [2022-10-11 10:04:21] GetCMListForConnect -- web API call failed (status = 0) [2022-10-11 10:04:21] [0,0] PingWebSocketCM() (cm2-iad1.cm.steampowered.com.:443) starting... [2022-10-11 10:04:21] [0,0] PingWebSocketCM() (cm2-lax1.cm.steampowered.com:27021) starting... [2022-10-11 10:04:21] [0,0] PingWebSocketCM() (cm1-lax1.cm.steampowered.com:27021) starting... [2022-10-11 10:04:21] [0,0] PingWebSocketCM() (cm2-iad1.cm.steampowered.com.:443) failed talking to cm (timeout/neterror - Invalid) [2022-10-11 10:04:21] [0,0] PingWebSocketCM() (cm2-lax1.cm.steampowered.com:27021) failed talking to cm (timeout/neterror - Invalid) [2022-10-11 10:04:21] [0,0] PingWebSocketCM() (cm1-lax1.cm.steampowered.com:27021) failed talking to cm (timeout/neterror - Invalid) [2022-10-11 10:04:21] [1,3] Connect() starting connection (eNetQOSLevelMedium, cm2-iad1.cm.steampowered.com.:443, WebSocket) [2022-10-11 10:04:21] [1,0] ConnectFailed('Connection Failed':0) (0.0.0.0:0, WebSocket) [2022-10-11 10:04:21] [1,0] Client thinks it can connect via: UDP - yes, TCP - yes, WebSocket:443 - yes, WebSocket:Non443 - yes [2022-10-11 10:04:21] [0,0] StartAutoReconnect() will start in 4.0 seconds (attempt 1) [2022-10-11 10:04:22] [0,0] SetSteamID( [G:1:0] )
该服务器在宿主机直接运行时完全正常,我已经使用了host网络模式,理论上网络环境应该和宿主机一致,但仍出现此问题,请问哪里操作有误?
排查与解决方案
1. 强制禁用IPv6
从错误日志看,IPv6连接测试全部超时,Docker的host模式下可能存在IPv6配置不兼容,导致Steam客户端优先尝试IPv6连接失败后无法正常回退到IPv4。
修改docker-compose.yml添加环境变量强制使用IPv4:
services: server: image: server network_mode: host environment: - STEAMFORCEIPV4=1
或者在Server.sh开头加入:
export STEAMFORCEIPV4=1
2. 替换兼容的steamclient.so
手动从宿主机拷贝的steamclient.so可能存在系统依赖或版本不匹配问题,建议通过SteamCMD在容器内下载对应版本的SDK文件:
修改Dockerfile:
FROM ubuntu:22.04 RUN apt-get update && apt-get install -y steamcmd RUN useradd -m steam # 容器内下载Steam SDK RUN su steam -c "steamcmd +login anonymous +force_install_dir /home/steam/steam_sdk +app_update 1007 +quit" COPY --chown=steam:steam LinuxServer /home/steam/ # 使用容器内下载的steamclient.so COPY --chown=steam:steam /home/steam/steam_sdk/linux64/steamclient.so /home/steam/.steam/sdk64/steamclient.so USER steam WORKDIR /home/steam CMD ./Server.sh
3. 检查网络权限限制
即使使用host模式,容器内用户可能受宿主机防火墙、SELinux规则限制:
- 临时关闭宿主机防火墙测试:
sudo ufw disable(测试后记得恢复) - 若SELinux开启,临时设置为宽容模式:
sudo setenforce 0
4. 验证Server.sh启动参数
确保Server.sh中没有硬编码绑定特定宿主机IP的参数,避免容器内无法正常监听网络。
内容的提问来源于stack exchange,提问作者Jupiter
相关产品推荐
相关产品推荐

