Docker部署Rasa Actions-Server启动失败求助
问题:Rasa Actions Server容器启动失败,报KeyError: 'DISPLAY'
我在Okteto上部署Rasa的actions-server时,容器rasa-actions-server始终以退出码1失败。日志显示KeyError: 'DISPLAY',排查后发现是因为actions.py中导入的pywhatkit依赖pyautogui,而pyautogui依赖的mouseinfo需要读取DISPLAY环境变量,但Docker容器内未设置该变量。我已检查版本但问题未解决,附上我的Docker配置文件,求帮忙解决。
错误日志
2022-11-23 21:53:05.37 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server2022-11-23 21:53:05 INFO rasa_sdk.endpoint - Starting action endpoint server... 2022-11-23 21:53:07.21 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server(0lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk(B 2022-11-23 21:53:07.23 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server(0x(B Rasa Open Source reports anonymous usage telemetry to help improve the product (0x(B 2022-11-23 21:53:07.23 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server(0x(B for all its users. (0x(B 2022-11-23 21:53:07.23 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server(0x(B (0x(B 2022-11-23 21:53:07.23 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server(0x(B If you'd like to opt-out, you can use `rasa telemetry disable`. (0x(B 2022-11-23 21:53:07.23 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server(0x(B To learn more, check out https://rasa.com/docs/rasa/telemetry/telemetry. (0x(B 2022-11-23 21:53:07.23 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server(0mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj(B 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-serverTraceback (most recent call last): 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "/usr/local/bin/rasa", line 8, in <module> 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server sys.exit(main()) 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "/usr/local/lib/python3.8/site-packages/rasa/__main__.py", line 119, in main 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server cmdline_arguments.func(cmdline_arguments) 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "/usr/local/lib/python3.8/site-packages/rasa/cli/run.py", line 59, in run_actions 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server sdk.main_from_args(args) 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "/usr/local/lib/python3.8/site-packages/rasa_sdk/__main__.py", line 18, in main_from_args 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server run( 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "/usr/local/lib/python3.8/site-packages/rasa_sdk/endpoint.py", line 139, in run 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server app = create_app( 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "/usr/local/lib/python3.8/site-packages/rasa_sdk/endpoint.py", line 82, in create_app 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server executor.register_package(action_package_name) 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "/usr/local/lib/python3.8/site-packages/rasa_sdk/executor.py", line 262, in register_package 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server self._import_submodules(package) 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "/usr/local/lib/python3.8/site-packages/rasa_sdk/executor.py", line 225, in _import_submodules 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server self._import_module(full_name) 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "/usr/local/lib/python3.8/site-packages/rasa_sdk/executor.py", line 239, in _import_module 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server module = importlib.import_module(name) 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server return _bootstrap._gcd_import(name[level:], package, level) 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "<frozen importlib._bootstrap>", line 1014, in _gcd_import 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "<frozen importlib._bootstrap>", line 991, in _find_and_load 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "<frozen importlib._bootstrap>", line 671, in _load_unlocked 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "<frozen importlib._bootstrap_external>", line 843, in exec_module 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "/app/actions/actions.py", line 21, in <module> 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server import pywhatkit 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "/usr/local/lib/python3.8/site-packages/pywhatkit/__init__.py", line 16, in <module> 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server from pywhatkit.whats import ( 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "/usr/local/lib/python3.8/site-packages/pywhatkit/whats.py", line 7, in <module> 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server import pyautogui as pg 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "/usr/local/lib/python3.8/site-packages/pyautogui/__init__.py", line 249, in <module> 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server import mouseinfo 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "/usr/local/lib/python3.8/site-packages/mouseinfo/__init__.py", line 223, in <module> 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server _display = Display(os.environ['DISPLAY']) 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server File "/usr/local/lib/python3.8/os.py", line 675, in __getitem__ 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-server raise KeyError(key) from None 2022-11-23 21:53:07.25 UTCrasa-actions-server-5979fcbbf-tr22hrasa-actions-serverKeyError: 'DISPLAY'
Dockerfile配置
FROM python:3.8-buster AS BASE RUN apt-get update && \ apt-get --assume-yes --no-install-recommends install \ build-essential \ curl \ git \ jq \ libgomp1 \ vim WORKDIR /app # upgrade pip version RUN pip install --no-cache-dir --upgrade pip # To install packages from PyPI COPY ./requirements.txt requirements.txt RUN pip install --no-cache-dir -r requirements.txt RUN pip install rasa==3.1 # Copy actions folder to working directory COPY ./actions /app/actions ADD config.yml config.yml ADD domain.yml domain.yml ADD credentials.yml credentials.yml ADD endpoints.yml endpoints.yml
docker-compose.yml配置
version: '3.7' services: rasa-server: image: rasa-bot:latest working_dir: /app build: "./" restart: always volumes: - ./actions:/app/actions - ./data:/app/data - ./models:/app/models command: bash -c "rm -rf models/* && rasa train && rasa run --enable-api --cors \"*\" -p 5006 --debug" ports: - '5006:5006' #external:internal networks: - all rasa-actions-server: image: rasa-bot:latest working_dir: /app build: "./" restart: always volumes: - ./actions:/app/actions command: ["rasa", "run", "actions"] ports: - '5055:5055' networks: - all networks: all: driver: bridge driver_opts: com.docker.network.enable_ipv6: "true"
解决办法
方法1:临时设置DISPLAY环境变量
在docker-compose.yml的rasa-actions-server服务中添加环境变量,仅用于验证问题根源:
services: rasa-actions-server: # ... 其他配置不变 environment: - DISPLAY=:0
注意:容器内无实际显示服务,后续可能仍会报错,不适合生产环境。
方法2:替换无GUI依赖(推荐)
pywhatkit的GUI功能在容器环境无法正常工作,若仅使用其非GUI功能(如消息发送),建议:
- 改用无需
pyautogui的替代库,直接调用对应服务的API - 或调整
actions.py的导入逻辑,仅在需要时导入pywhatkit并捕获环境变量错误,但这只是临时 workaround
方法3:安装虚拟显示服务(必须用pyautogui时)
如果一定要保留pyautogui,可以在容器内安装虚拟X服务器:
- 修改Dockerfile,在apt-get install中添加
xvfb:RUN apt-get update && \ apt-get --assume-yes --no-install-recommends install \ build-essential \ curl \ git \ jq \ libgomp1 \ vim \ xvfb - 修改
docker-compose.yml中rasa-actions-server的命令和环境变量:services: rasa-actions-server: # ... 其他配置不变 environment: - DISPLAY=:0 command: bash -c "Xvfb :0 -screen 0 1024x768x16 & rasa run actions"
内容的提问来源于stack exchange,提问作者noideawhatim
相关产品推荐
相关产品推荐

