Administrator
发布于 2025-10-11 / 8 阅读 / 0 评论 / 0 点赞

非root用户使用podman部署Clickhouse文件权限问题解决

背景

用户只能在非root用户下使用podman部署Clickhouse

部署命令:

podman run 
  --name clickhouse \
  -v /home/demo/clickhouse/fs/volumes/config.d:/etc/clickhouse-server/config.d \
  -d clickhouse/clickhouse-server:latest

问题以及解决

部署后报以下错误:

Cannot print extra info for Poco::Exception (version 25.9.3.48 (official build))
std::exception. Code: 1001, type: std::__1::filesystem::filesystem_error, e.what() = filesystem error: in posix_stat: failed to determine attributes for the specified path: Permission denied ["/etc/clickhouse-server/config.d/config.xml"]
Cannot print extra info for Poco::Exception (version 25.9.3.48 (official build))
std::exception. Code: 1001, type: std::__1::filesystem::filesystem_error, e.what() = filesystem error: in posix_stat: failed to determine attributes for the specified path: Permission denied ["/etc/clickhouse-server/config.d/config.xml"]

解决“/home/demo/clickhouse/fs/volumes/config.d”权限问题后发现问题还在

临时关闭 SELinux(快速验证)

临时关闭 SELinux 以确认是否为其导致的问题:

sudo setenforce 0  # 临时切换为Permissive模式(不强制执行策略)
​
# 重新测试临时容器
podman run -it --rm \
  --name temp-clickhouse \
  --userns=host \
  -v /home/demo/clickhouse/fs/volumes/config.d:/etc/clickhouse-server/config.d \
  clickhouse/clickhouse-server:latest \
  bash
​
# 容器内执行以下命令验证是否能访问
ls -l /etc/clickhouse-server/config.d

验证发现可以正常启动,容器内的“/etc/clickhouse-server/config.d”文件权限也是正常的

永久配置 SELinux 上下文(推荐)

为挂载目录添加容器可访问的 SELinux 标签(container_file_tsvirt_sandbox_file_t):

# 递归设置整个fs目录的SELinux上下文(包含所有子目录和文件)
sudo chcon -Rt container_file_t /home/demo/clickhouse/fs
​
# 验证上下文是否生效(应显示标签为container_file_t)
ls -Z /home/demo/clickhouse/fs/volumes/clickhouse-01/etc/clickhouse-server/config.d
  • container_file_t是 Podman 容器默认允许访问的标签,适用于大多数场景。

若仍有问题,可尝试svirt_sandbox_file_t标签(旧版本 Podman 常用):

sudo chcon -Rt svirt_sandbox_file_t /home/demo/clickhouse/fs

重新部署并验证

# 恢复SELinux为Enforcing模式(若之前临时关闭)
sudo setenforce 1
​
# 重新部署所有服务
podman run 
  --name clickhouse \
  -v /home/demo/clickhouse/fs/volumes/config.d:/etc/clickhouse-server/config.d \
  -d clickhouse/clickhouse-server:latest

总结说明

目录权限后的.符号:在ls -l输出中,drwxrwxrwx.的.表示该文件受 SELinux 保护,权限不仅由 rwx 控制,还受 SELinux 策略限制。