13 Star 16 Fork 142

src-openEuler/glibc

 / 详情

[glibc] 在x86架构的docker中无法使用curl

已验收
缺陷
创建于  
2021-08-26 14:29

【标题描述】[glibc] 在x86架构的docker中无法使用curl
【环境信息】
硬件信息:
1) 裸机场景提供出问题的硬件信息;
2) 虚机场景提供虚机XML文件或者配置信息
软件信息:
1) OS版本及分支:openEuler 21.09
2) 内核信息:
3) 发现问题的组件版本信息:
docker-engine-18.09.0-115.oe1
curl-7.77.0-2.oe1.x86_64
docker image:
http://121.36.84.172/dailybuild/openEuler-21.09/test_openeuler-2021-08-16-20-35-57/docker_img
【问题复现步骤】

  1. 在openEuler 21.09 x86架构中安装docker,导入21.09的docker image
    docker load -i docker_image

  2. 关闭防火墙使docker可以联网
    systemctl stop firewalld
    systemctl disable firewalld
    systemctl restart docker

  3. 启动docker
    docker create -it -v /home/docker_dir:/home/common image_id /bin/bash
    docker start -i $docker_id

  4. 在docker中curl外网
    curl www.baidu.com

【预期结果】
在21.09 arm的docker中使用curl成功,但是在21.09 x86的docker中使用curl失败

【实际结果】
在21.09 x86的docker中应该也使用curl成功

【附件信息】
arm docker:
输入图片说明

x86 docker:
输入图片说明

附件
x86_curl.log(123 Bytes)下载
机智的泡泡 2021-08-27 09:50
arm_curl.log(13.54 KB)下载
机智的泡泡 2021-08-27 09:51

评论 (13)

机智的泡泡 创建了缺陷
机智的泡泡 关联仓库设置为src-openEuler/curl
展开全部操作日志

Hey meitingli, Welcome to openEuler Community.
You can follow the instructions at to interact with the Bot.
openeuler-ci-bot%!(EXTRA string=https://gitee.com/openeuler/community/blob/master/en/sig-infrastructure/command.md)

openeuler-ci-bot 添加了
 
sig/Networking
标签
机智的泡泡 修改了描述
机智的泡泡 修改了描述
机智的泡泡 优先级设置为主要
small_leek 负责人设置为yanan-rock

x86的docker中ip地址有吗?

安装iproute后查看是有的。

机智的泡泡 上传了附件x86_curl.log
机智的泡泡 上传了附件arm_curl.log
机智的泡泡 修改了描述

@机智的泡泡
已经确认是权限不足导致,strace跟踪命令运行,有明显日志:
clone3({flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_FLEARTD,child_tid=0x7fe33bf09919, parent_tid=0x7fe33bf09910, exit_signal=0, stack=0x7fe33b709000, stack_size=0x7ffe00, tls=0x7f0ba5212640}, 88)= -1 EPERM (Operation not permitted)
之后就是close,然后打印错误输出

跟curl命令本身没有什么关系,是容器赋予的权限不足

@机智的泡泡
已经确认是权限不足导致,strace跟踪命令运行,有明显日志:
clone3({flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_FLEARTD,child_tid=0x7fe33bf09919, parent_tid=0x7fe33bf09910, exit_signal=0, stack=0x7fe33b709000, stack_size=0x7ffe00, tls=0x7f0ba5212640}, 88)= -1 EPERM (Operation not permitted)
之后就是close,然后打印错误输出

跟curl命令本身没有什么关系,是容器赋予的权限不足

@eaglegai 以前版本有这个问题不 ?

做过以下试验:
在21.09的环境上启动21.09的docker镜像,有问题
在21.09的环境上使用参数--security-opt 'seccomp:unconfined' 启动21.09的docker镜像,没有问题
在21.03的环境上启动21.03的docker镜像,没有问题
在21.03的环境上启动21.09的docker镜像,问题依然在
在21.03的环境上启动21.09的docker镜像,然后将21.03的docker镜像的curl命令和libcurl库拷到21.09的镜像中,问题依然存在
另外除了curl命令,git clone命令也有相同的报错
综上说明跟curl没有关系
在curl -> clone3 -> glibc(SYS_clone) -> seccomp -> kernel(clone) 的调用关系中,curl、seccomp、kernel之间的交互都可以排除,只剩下glibc的问题了

@机智的泡泡
跟glibc的clone3模块责任人@liqingqing_1229 确认,社区有相关的glibc的issue,但是目前没有补丁:
https://sourceware.org/bugzilla/show_bug.cgi?id=28287

@机智的泡泡
跟glibc的clone3模块责任人@liqingqing_1229 确认,社区有相关的glibc的issue,但是目前没有补丁:
https://sourceware.org/bugzilla/show_bug.cgi?id=28287

@eaglegai 好的,谢谢。我会将该问题单转移到glibc的仓库下进行跟踪。

机智的泡泡 修改了描述
机智的泡泡 修改了标题
liqingqing_1229 任务状态待办的 修改为已确认

glibc社区已有人提交了补丁,跟踪社区issue,待合入后回合对应补丁。

社区matainer已答复,该问题不是glibc的问题,请确认container社区有没有最新的修改。 @机智的泡泡 @yanan-rock @eaglegai

liqingqing_1229 任务状态已确认 修改为待办的
Vanient 通过src-openeuler/docker Pull Request !56任务状态待办的 修改为已完成

OS版本:openEuler21.09
组件版本:glibc-2.34-3.oe1.x86_64
回归结果:
回归测试通过。
输入图片说明
输入图片说明

机智的泡泡 任务状态已完成 修改为已验收

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(6)
5329419 openeuler ci bot 1632792936 7818392 meitingli 1654830044 7956412 yang yanchao 1692438383
1
https://gitee.com/src-openeuler/glibc.git
git@gitee.com:src-openeuler/glibc.git
src-openeuler
glibc
glibc

搜索帮助

A270a887 8829481 3d7a4017 8829481