Closed northsea4 closed 1 year ago
犯了低级错误。 分析:
RDP_PORT
是写在.env
文件里的,然后docker-compose.yml文件里使用env_file
指定了.env
文件,也就是这个原本只是用来作为映射宿主机端口的环境变量,同时也被映射到了容器内;gclient
实际连接的是「容器环境内的RDP端口(3389)」,而不是「映射到宿主机的RDP端口」,而因为第一点,导致gclient
连接到了一个错误的端口(3390)。解决:
避免环境变量污染。
把.env
文件里的RDP_PORT
改名为RDP_LISTEN_PORT
。 https://github.com/northsea4/mdcx-docker/commit/79c880b00234c94cd4f87fe93ff2fa775ec73409
复现
RDP_PORT=3390
页面会显示: Error Connecting to Desktop {"code":519,"message":"Aborted. See logs."}
日志
排查
提供web访问服务的是一个叫
gclient
的应用。 该应用的启动脚本(app.js):~~初步怀疑,通过docker设置的环境变量(当然包含
RDP_PORT
),并没有传递到gclient运行的环境中。 即process.env.RDP_PORT
为空,所以gclient
就取了默认的3389
,导致不能通过web访问。~~~~
docker exec -it test bash
进入容器,使用printenv
查看环境变量,可以看到.env
里的环境变量都在列表里。 但是,通过RDP连接到容器里的ubuntu,在konsole
里使用printenv
,却看不到.env
里的环境变量。~~