Linux Docker容器中Ray运行失败求助(已尝试多种方案)
Ray在Linux Docker容器中初始化失败的解决思路
本地Mac运行正常的Ray 2.1.0代码,部署到基于
python:3.10.9-slim-bullseye(指定--platform=linux/amd64)的Docker容器后,先触发/dev/shm空间不足警告,随后启动本地Ray实例,但很快报错:core_worker.cc:179: Failed to register worker 01000000ffffffffffffffffffffffffffffffffffffffffffffffff to Raylet. IOError: [RayletClient] Unable to register worker with raylet. No such file or directory已尝试增大/dev/shm空间、限制CPU数量、指定
_plasma_directory参数,但问题未解决。
解决思路
1. 修正Docker的/dev/shm配置与权限
- 启动容器时明确指定
--shm-size(建议设为容器可用内存的30%以上),同时确保容器内/dev/shm权限正确:docker run --shm-size=4g --your-other-options your-image - 若使用docker-compose,在服务配置中添加:
services: your-service: shm_size: '4g' # 其他容器配置 - 进入容器后检查
/dev/shm权限,确保Ray进程有读写权限:ls -ld /dev/shm # 正常输出应为 drwxrwxrwt root root
2. 调整Ray初始化的参数组合
- 同时指定
num_cpus、_temp_dir和正确的_plasma_directory(注意用绝对路径,之前的dev/shm/缺少根目录):ray.init( num_cpus=2, # 根据容器CPU配额设置,不超过可用核数 _temp_dir="/tmp/ray-tmp", _plasma_directory="/dev/shm" ) - 临时排查可禁用共享内存,强制Ray用磁盘存储对象(性能会下降,仅用于验证):
ray.init(object_store_memory=0)
3. 补充Docker容器的系统依赖
python:slim-bullseye缺少Ray运行所需的部分基础系统库,在Dockerfile中添加安装命令:
RUN apt-get update && apt-get install -y --no-install-recommends \ libglib2.0-0 \ libnss3 \ libgconf-2-4 \ libfontconfig1 \ && rm -rf /var/lib/apt/lists/*
4. 调整Ray版本
Ray 2.1.0存在部分Docker环境下的兼容性问题,尝试升级到2.2.0+或降级到2.0.0版本:
# 升级版本 pip install ray==2.2.0 # 降级版本 pip install ray==2.0.0
5. 排查容器内的套接字与临时目录权限
- Ray依赖本地套接字进行进程通信,确保
/tmp目录权限正常且未被设为只读:docker run --mount type=tmpfs,destination=/tmp,tmpfs-mode=1777 --your-other-options your-image - 启动Ray时明确指定套接字路径:
ray.init(raylet_socket_name="/tmp/ray/raylet.sock")
内容的提问来源于stack exchange,提问作者HagaiA
相关产品推荐
相关产品推荐

