Ubuntu下Docker运行pytest遇权限拒绝及环境变量缺失问题
解决方案
一、文件权限拒绝(Errno 13)处理
- 核心原因:容器内执行pytest的用户没有目标文件的读取权限,通常是宿主机挂载的文件/目录权限与容器运行用户不匹配。
- 操作步骤:
- 确认容器默认运行用户:进入
connectors_connectors_1容器,执行whoami查看当前用户,或者检查Dockerfile中的USER指令。 - 对齐宿主机文件权限:
- 若容器默认用root运行,给宿主机上的目标文件添加其他用户读权限:
chmod o+r /宿主机路径/mediacost_4017119502.csv /宿主机路径/6012438.zip - 若容器用非root用户(比如UID 1000),直接修改宿主机文件的所属用户:
chown 1000:1000 /宿主机路径/mediacost_4017119502.csv /宿主机路径/6012438.zip
- 若容器默认用root运行,给宿主机上的目标文件添加其他用户读权限:
- 也可以在
docker-compose.yml的connectors服务中添加user: "1000:1000",让容器以指定用户启动,避免权限不匹配。
- 确认容器默认运行用户:进入
二、指定用户运行时的环境变量与端口问题
- 核心原因:单独用
docker run没有继承docker-compose.yml中的环境变量、端口映射等配置,导致程序找不到SECRETS_PATH,同时端口配置无效。 - 操作步骤:
- 优先用docker-compose指定用户运行测试:
这个命令会自动加载docker-compose run --user 1000:1000 connectors_connectors_1 pytest test_all_connector.pydocker-compose.yml里的所有配置(环境变量、挂载、端口等),无需手动指定。 - 若必须用
docker run,手动补全配置:
其中docker run --user 1000:1000 \ -e SECRETS_PATH=/容器内的秘钥路径 \ -p 宿主机端口:容器端口 \ connectors_connectors_1 pytest test_all_connector.py/容器内的秘钥路径要和docker-compose.yml中配置的SECRETS_PATH一致,端口也要对应配置里的映射关系。
- 优先用docker-compose指定用户运行测试:
内容的提问来源于stack exchange,提问作者visiwat303
相关产品推荐
相关产品推荐

