我正在 docker 中的 entrypoint shell 脚本中启动一个 screen 会话,然后将
screen -list
的输出记录到文件中。
#!/bin/sh
screen -S my_screen -dm bash -c 'cd project && npm run start'
screen -list > scr_list.log
然后我连接到docker容器并查看输出的日志。
here is a screen on:
14.my_screen (12/18/24 17:55:29) (Detached)
1 Socket in /run/screen/S-root.
但是当我连接后手动运行
screen -list
时,它输出:
No Sockets found in /run/screen/S-root.
使用同一用户(whoami):
root
任何想法,可能是什么问题?
为了确保 screen 会话在 Docker 容器中持续存在,您需要确保 screen 会话已正确初始化并维护必要的环境。您当前的脚本几乎是正确的,但您可能需要调整屏幕会话的创建方式并确保屏幕套接字目录可访问。
这是脚本的改进版本:
#!/bin/sh
mkdir -p /运行/屏幕
screen -S my_screen -dm bash -c 'cd /path/to/project && npm run start'
屏幕-列表> /path/to/scr_list.log
确保将 /path/to/project 和 /path/to/scr_list.log 替换为容器中的实际路径。此外,请确保 Docker 容器的运行方式不会限制对 /run/screen 目录的访问。
运行此脚本后,您应该能够使用 screen -r my_screen 连接到 screen 会话并查看预期的输出。如果仍然遇到问题,请检查屏幕套接字目录的权限,并确保 Docker 容器在脚本运行后不会立即退出。