[英]Unable to execute binary file in Docker container (“Operation not permitted”)
我正在构建一个Docker容器(基于RHEL),该容器包含来自第三方存储库的自定义二进制文件。 在容器中执行二进制文件时,我收到一个Operation not permitted
描述的错误:“ Operation not permitted
”。
Dockerfile非常简单。
FROM dockerregistry.example.com/rhel7:latest
RUN yum -y install \
curl \
custom-package && \
curl -Lsq https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64 > /sbin/dumb-init && \
chmod 755 /sbin/dumb-init && \
yum clean all
ADD custom-package.conf /etc/custom-package/custom-package.conf
ENTRYPOINT ["/sbin/dumb-init", "--"]
CMD ["/usr/local/custom-package/bin/custom-package", "--config", "/etc/custom-package/custom-package.conf"]
我使用以下命令在工作站上构建并输入容器。
$ docker build -t custom-package:v1 .
$ docker run --security-opt seccomp:unconfined -d custom-package:v1 tail -f /dev/null
$ docker exec -it <image ID> /bin/bash
进入图像后,如果尝试执行二进制文件,则会收到极其无用的错误。 运行strace
也会产生令人困惑的输出。 在检查文件权限和元数据时,看起来不错。
# /usr/local/telegraf/bin/telegraf
bash: /usr/local/telegraf/bin/telegraf: Operation not permitted
# strace -f /usr/local/telegraf/bin/telegraf
execve("/usr/local/telegraf/bin/telegraf", ["/usr/local/telegraf/bin/telegraf"], [/* 17 vars */]) = -1 EPERM (Operation not permitted)
write(2, "strace: exec: Operation not perm"..., 38strace: exec: Operation not permitted
) = 38
exit_group(1) = ?
+++ exited with 1 +++
# ls -l /usr/local/telegraf/bin/telegraf
-rwxr-xr-x 1 telegraf telegraf 38664736 Jun 3 15:41 /usr/local/telegraf/bin/telegraf
# getcap -v /usr/local/telegraf/bin/telegraf
/usr/local/telegraf/bin/telegraf = cap_sys_rawio+ep
我无法收集足够的信息来调试我的容器,以及为什么可执行二进制文件不起作用。 是否有什么地方出了错,或者是为什么我会收到这样的无用错误?
谢谢!
SYS_RAWIO功能需要--privileged
选项才能访问设备。 参见功能(7)。
http://man7.org/linux/man-pages/man7/capabilities.7.html
CAP_SYS_RAWIO
* Perform I/O port operations (iopl(2) and ioperm(2));
* access /proc/kcore;
* employ the FIBMAP ioctl(2) operation;
* open devices for accessing x86 model-specific registers (MSRs, see msr(4))
* update /proc/sys/vm/mmap_min_addr;
* create memory mappings at addresses below the value specified by /proc/sys/vm/mmap_min_addr;
* map files in /proc/bus/pci;
* open /dev/mem and /dev/kmem;
* perform various SCSI device commands;
* perform certain operations on hpsa(4) and cciss(4) devices;
* perform a range of device-specific operations on other devices.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.