【标题描述】[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
【问题复现步骤】
在openEuler 21.09 x86架构中安装docker,导入21.09的docker image
docker load -i docker_image
关闭防火墙使docker可以联网
systemctl stop firewalld
systemctl disable firewalld
systemctl restart docker
启动docker
docker create -it -v /home/docker_dir:/home/common image_id /bin/bash
docker start -i $docker_id
在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:
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)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
x86的docker中ip地址有吗?
安装iproute后查看是有的。
@机智的泡泡
已经确认是权限不足导致,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的仓库下进行跟踪。
glibc社区已有人提交了补丁,跟踪社区issue,待合入后回合对应补丁。
社区matainer已答复,该问题不是glibc的问题,请确认container社区有没有最新的修改。 @机智的泡泡 @yanan-rock @eaglegai
@Vanient @机智的泡泡 @eaglegai @yanan-rock
请确认该issue
OS版本:openEuler21.09
组件版本:glibc-2.34-3.oe1.x86_64
回归结果:
回归测试通过。
登录 后才可以发表评论