我正在尝试在 Ubuntu (20.04) 服务器上启动 Selenium (4.13.0) 作为 Docker 容器。硬盘已格式化为
xfs
并已启用配额。容器立即停止并出现错误。
相同的命令可以在没有配额的
ext4
格式化硬盘上正常运行。但是,其他容器(Spring Boot 和 Python)可以通过 xfs
和配额正常运行。
背景
我试图限制 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', '/']
主机上的配置
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
Docker 安装
容器内没有安装座。
/tmp
目录位于容器中。
ubuntu@my-server:~$ docker container inspect selenium | grep "Mount"
"MountLabel": "",
"Mounts": [],
容器中的配置
容器中的
fstab
未配置:
seluser@2e59d8a6232f:/$ cat /etc/fstab
# UNCONFIGURED FSTAB FOR BASE SYSTEM
研究
我阅读了找不到可用的临时目录并检查了主机系统上的磁盘使用情况:
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
在 Docker 容器中:
Filesystem Size Used Avail Use% Mounted on
overlay 22G 14G 8.5G 62% /
我已禁用配额,但收到相同的错误消息。
我阅读了使用 OverlayFS 存储驱动程序并检查了
xfs_info
:
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
我阅读了使用 OverlayFS 存储驱动程序并检查了
docker info
:
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
我阅读了找不到可用的临时目录并检查了主机上的索引节点:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvdc 11534336 202409 11331927 2% /mnt/docker-data
在 Docker 容器中:
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)
tempfile.py
并检查了容器中/tmp
的权限:
drwxr-xr-t 1 root root 23 Apr 29 07:46 tmp
所以有些东西改变了权限。在原始图像中,权限是
drwxrwxrwt
。
由于错误,我无法使用默认入口点,因此我使用入口点
bash
启动容器来检查值。我不知道这是否会改变值。
问题
如何在启用配额的 xfs 磁盘上的 Docker 容器中启动 Selenium?
显然图像以某种方式损坏了(如果有人知道图像如何以这种方式损坏,请添加评论)。
为了解决这个问题,我必须删除该图像并提取一个干净的图像。我做了以下事情:
删除 Docker 容器
docker container prune
删除 Docker 镜像
docker image prune -a
启动 Docker 容器
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
完成这些步骤后,该目录具有正确的权限:
drwxrwxrwt 1 root root 23 Oct 4 2023 tmp