ubuntu - 泊坞窗中的 LD_PRELOAD
问题描述
当我按以下方式运行 docker 时:
docker run -it -e LD_PRELOAD=/bin/xyz.so bash env
它按预期运行,输出为:
HOSTNAME=2116ac3bae11
_BASH_VERSION=4.4
_BASH_LATEST_PATCH=23
PWD=/
HOME=/root
_BASH_GPG_KEY=7C0135FB088AAF6C66C650B9BB5869F064EA74AB
TERM=xterm
SHLVL=0
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_BASH_PATCH_LEVEL=18
LD_PRELOAD=/bin/xyz.so
但是,当我使用另一个图像(例如 ubuntu 或 centos)运行相同的命令时:
docker run -it -e LD_PRELOAD=/bin/xyz.so ubuntu env
docker run -it -e LD_PRELOAD=/bin/xyz.so centos:7 env
LD_PRELOAD 变量从输出中消失:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=00b161980ef6
TERM=xterm
HOME=/root
谁能解释命令之间有什么区别?如何使用 LD_PRELOAD 运行 centos 映像?
这似乎是一些 docker 安全机制,它从环境变量中清除 LD_PRELOAD。但是为什么只在最后一个命令中而不是在第一个命令中呢?
Docker 版本 17.12.1-ce,构建 7390fc6
解决方案
您的 ld_preload 共享对象可能不存在于这些 docker 镜像中,或者它依赖于其他 docker 镜像中不存在的依赖项。您可以通过查看 Docker 映像文件系统中的共享对象及其依赖项轻松找出答案。要弄清楚依赖关系是什么,请使用“ldd /bin/xyz.so”作为依赖关系。
推荐阅读
- google-apps-script - 如何在函数中使用地图 - Apps 脚本
- powershell - Powershell参数传入for循环以发挥作用
- python - 使用 SimpleImputer 输入最小值时出错
- python - OLS回归python中的预测形状未对齐错误
- mysql - 选择查询中的 Laravel 雄辩的 json
- message-queue - 消息队列 *like* 技术
- sharing - 将带有 Angular 的 Nativescript 的 Web 和移动代码共享迁移到版本 8
- sql - 如何根据特定类型对表中的行值求和?
- swiftui - List swiftUI中的单选按钮
- gitlab - 我们可以将具有多个元素的 gitlab 变量传递给 shell 脚本吗