【发布时间】:2017-12-17 08:31:54
【问题描述】:
问题
我正在构建一个 Docker 容器(基于 RHEL),其中包含来自第三方存储库的自定义二进制文件。在容器中执行二进制文件时,我收到一个无法描述的错误:“Operation not permitted”。
分析
Dockerfile
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
我无法收集足够的信息来调试我的容器以及为什么可执行二进制文件无法正常工作。是否有明显的错误或我会收到这样无用的错误的原因?
谢谢!
【问题讨论】:
-
问题中没有足够的信息来重现/回答。充其量我们可以猜到? (是ulimit的问题吗?)
-
@AnthonySottile 我可以提供哪些信息以使其更易于调试?最终,我不想修复包(我认为这是我必须自己做的事情),但我只想获得更多有用的信息以进行调试。
标签: bash docker centos dockerfile rhel