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

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服务器:

  1. 修改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
    
  2. 修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:45:54