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

启用配额的XFS磁盘上Selenium Docker容器启动失败,如何解决?

问题描述

在Ubuntu 20.04服务器上,使用Docker启动Selenium standalone-chrome 4.13.0容器时,服务器硬盘为启用配额的XFS格式,容器启动后立即停止并报错。相同命令在未启用配额的ext4硬盘上可正常运行,且其他容器(Spring Boot、Python)在XFS配额环境下也能正常启动。

背景

需要限制Docker容器的可写层存储空间,参考了Docker官方关于--storage-opt的配置文档。

启动命令

docker container run 
  --log-driver local 
  --detach 
  --shm-size=1g 
  --name selenium 
  --env SE_NODE_OVERRIDE_MAX_SESSIONS=true 
  --env SE_NODE_MAX_SESSIONS=10 
  --env SE_NODE_SESSION_TIMEOUT=180 
  selenium/standalone-chrome:4.13.0      

容器日志

2024-04-26 10:50:46.138 Traceback (most recent call last):
2024-04-26 10:50:46.138   File "/usr/bin/supervisord", line 11, in <module>
2024-04-26 10:50:46.138     load_entry_point('supervisor==4.1.0', 'console_scripts', 'supervisord')()
2024-04-26 10:50:46.138   File "/usr/lib/python3/dist-packages/supervisor/supervisord.py", line 350, in main
2024-04-26 10:50:46.138     options = ServerOptions()
2024-04-26 10:50:46.138   File "/usr/lib/python3/dist-packages/supervisor/options.py", line 439, in __init__
2024-04-26 10:50:46.138     existing_directory, default=tempfile.gettempdir())
2024-04-26 10:50:46.138   File "/usr/lib/python3.8/tempfile.py", line 425, in gettempdir
2024-04-26 10:50:46.138     tempdir = _get_default_tempdir()
2024-04-26 10:50:46.138   File "/usr/lib/python3.8/tempfile.py", line 357, in _get_default_tempdir
2024-04-26 10:50:46.138     raise FileNotFoundError(_errno.ENOENT,
2024-04-26 10:50:46.138 FileNotFoundError: [Errno 2] No usable temporary directory found in ['/tmp', '/var/tmp', '/usr/tmp', '/']

主机配置

Docker daemon配置

ubuntu@my-server:~$ cat /etc/docker/daemon.json
{
    "data-root": "/mnt/docker-data"
}

挂载配置

ubuntu@my-server:~$ cat /etc/fstab
LABEL=cloudimg-rootfs                           /                       ext4    defaults,discard                        0 0
UUID=f37b6675-93d5-405d-a68e-aeb459872297       /mnt/docker-data        xfs     defaults,quota,prjquota,pquota,gquota   0 0

排查过程

  • 检查磁盘使用情况,主机和容器内磁盘均有剩余空间:
    # 主机磁盘
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/root       9.7G  6.1G  3.6G  63% /
    /dev/xvdc        22G   14G  8.5G  62% /mnt/docker-data
    
    # 容器内磁盘
    Filesystem      Size  Used Avail Use% Mounted on
    overlay          22G   14G  8.5G  62% /
    
  • 禁用XFS配额后,问题依然存在
  • 检查XFS文件系统信息,确认ftype=1(符合OverlayFS要求):
    root@my-server:/home/ubuntu# xfs_info /dev/xvdc
    meta-data=/dev/xvdc              isize=512    agcount=4, agsize=1441792 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=1, sparse=1, rmapbt=0
             =                       reflink=1
    data     =                       bsize=4096   blocks=5767168, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
    log      =internal log           bsize=4096   blocks=2816, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    
  • 检查Docker存储驱动,确认使用overlay2,且支持d_type:
    Storage Driver: overlay2
     Backing Filesystem: xfs
     Supports d_type: true
     Native Overlay Diff: true
     userxattr: false
    
  • 检查inode使用情况,主机和容器内inode均充足:
    # 主机inode
    Filesystem       Inodes  IUsed    IFree IUse% Mounted on
    /dev/xvdc      11534336 202409 11331927    2% /mnt/docker-data
    
    # 容器内inode
    Filesystem       Inodes  IUsed    IFree IUse% Mounted on
    overlay        11534336 202524 11331812    2% /
    
  • 检查磁盘挂载属性,确认是读写模式:
    /dev/xvdc on /mnt/docker-data type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,usrquota,prjquota,grpquota)
    
  • 检查容器内/tmp目录权限,发现权限为drwxr-xr-t,而原镜像中应为drwxrwxrwt

问题

如何在启用配额的XFS磁盘上启动Selenium Docker容器?


解决方案

核心问题是容器内/tmp目录权限不符合Python tempfile模块的要求(需要粘性位和其他用户可写权限),可通过以下方式解决:

方法1:启动时手动修正权限

修改启动命令,先修正/tmp权限再执行原入口点,无需重新构建镜像:

docker container run 
  --log-driver local 
  --detach 
  --shm-size=1g 
  --name selenium 
  --env SE_NODE_OVERRIDE_MAX_SESSIONS=true 
  --env SE_NODE_MAX_SESSIONS=10 
  --env SE_NODE_SESSION_TIMEOUT=180 
  selenium/standalone-chrome:4.13.0 
  /bin/bash -c "chmod 1777 /tmp && /opt/bin/entry_point.sh"

方法2:自定义镜像修正权限

创建自定义Dockerfile,修正/tmp权限后重新构建镜像:

FROM selenium/standalone-chrome:4.13.0
RUN chmod 1777 /tmp

构建并运行:

docker build -t custom-selenium-chrome .
docker container run 
  --log-driver local 
  --detach 
  --shm-size=1g 
  --name selenium 
  --env SE_NODE_OVERRIDE_MAX_SESSIONS=true 
  --env SE_NODE_MAX_SESSIONS=10 
  --env SE_NODE_SESSION_TIMEOUT=180 
  custom-selenium-chrome

方法3:挂载主机临时目录

将主机/tmp挂载到容器内,绕过容器内权限问题:

docker container run 
  --log-driver local 
  --detach 
  --shm-size=1g 
  --name selenium 
  --env SE_NODE_OVERRIDE_MAX_SESSIONS=true 
  --env SE_NODE_MAX_SESSIONS=10 
  --env SE_NODE_SESSION_TIMEOUT=180 
  -v /tmp:/tmp 
  selenium/standalone-chrome:4.13.0

内容的提问来源于stack exchange,提问作者dur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:55:56