我试图在Docker容器中使用perf工具来记录给定命令。
kernel.perf_event_paranoid
设置为1,但是当我不放置该--privileged
标志时,容器的行为就像是2 。
我可以使用--privileged
,但是我在perf上运行的代码是不可信的,并且如果我可以通过允许使用perf工具承担一点安全风险,那么在容器上赋予特权权限似乎具有不同的风险级别。
还有其他使用容器内部perf的方法吗?
~$ docker version
Client:
Version: 17.03.1-ce
API version: 1.27
Go version: go1.7.5
Git commit: 7392c3b/17.03.1-ce
Built: Tue May 30 17:59:44 2017
OS/Arch: linux/amd64
Server:
Version: 17.03.1-ce
API version: 1.27 (minimum version 1.12)
Go version: go1.7.5
Git commit: 7392c3b/17.03.1-ce
Built: Tue May 30 17:59:44 2017
OS/Arch: linux/amd64
Experimental: false
~$ cat /proc/sys/kernel/perf_event_paranoid
1
~$ perf record ./my-executable
perf_event_open(..., PERF_FLAG_FD_CLOEXEC) failed with unexpected error 1 (Operation not permitted)
perf_event_open(..., 0) failed unexpectedly with error 1 (Operation not permitted)
Error:
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
-1 - Not paranoid at all
0 - Disallow raw tracepoint access for unpriv
1 - Disallow cpu events for unpriv
2 - Disallow kernel profiling for unpriv
经过研究,问题不在于perf_event_paranoid
,而是perf_event_open
(syscall)已在Docker中列入黑名单的事实:
https
://docs.docker.com/engine/security/seccomp/“ Docker
v17.06:Seccomp安全配置文件对于Docker”
默认配置文件阻止了大量系统调用
perf_event_open
跟踪/分析系统调用,这可能会泄漏主机上的许多信息。
我对此的第一个解决方法是拥有一个脚本,该脚本可以下载官方seccomp文件https://github.com/moby/moby/blob/master/profiles/seccomp/default.json,并将其添加perf_event_open
到白名单中列出的系统调用。
然后我用 --security-opt seccomp=my-seccomp.json
编辑(2/19/21):自从几年前我提出这个原始问题以来,已经过去了很多时间,从那时起我看到了一系列的活动。我重新选择了一个答案,我认为它与解决这个问题的最本地化和最安全的选项一致(通常与docker compose相关)。虽然docker引入了命令,但这通常是一个危险的操作,我会谨慎使用,因为您可能会无意中影响机器上的其他应用程序或设置 我在使用Docker 1.9删除Docker卷时遇到问题。
问题内容: 我首先得到了我的nginx码头工人形象: 然后我开始了: 然后我停止了它: 然后我尝试重新启动它: 好吧,这是一个错误。但实际上,现在容器列表中没有任何内容: 为什么重启nginx镜像失败?如何解决? 问题答案: 这是因为 您已使用开关。 容器已停止且未移除 你发现它停止了 您可以使用以下命令简单地启动它: 编辑:替代方法 如果您想每次使用以下命令启动容器, 然后使用以下之一: 方法1
问题内容: 我有一个Wordpress / MySQL docker容器,用于开发主题和插件。我在localhost:8000上访问它。 它使用了Gulp构建过程,我正在尝试将browsersync添加到组合中。我很难让browsersync真正代理出容器。从Gulp输出中,我可以看到它正在生成更改,只是实际上并未在浏览器中进行任何更改。 这是我的docker-compose.yml,gulpfi
问题内容: 我的工作正常,但现在停止了。我尝试了以下命令,但无济于事: -在主机和容器上 我所得到的是。Docker版本0.7.0 有任何想法吗? PS也禁用 问题答案: 遵循以下建议进行修复: […]您可以尝试重设所有内容吗? 它将迫使docker重新创建网桥并重新初始化所有网络规则 https://github.com/dotcloud/docker/issues/866#issuecomme
我让它正常工作,但现在它停止了。我尝试了以下命令,但没有用: -在主机和容器上 我得到的是未知主机google。com。Docker版本0.7.0 有什么想法吗? P、 S.ufw也被禁用
问题内容: 我要完成的工作是在已经使用Ansible在Digital Ocean Ubuntu / Docker Droplet上创建的Docker容器内运行命令。 似乎找不到任何东西,或者我主要是缺少一些东西。这是我在剧本中完成的任务。我对Ansible非常陌生,因此任何建议或智慧都将不胜感激。 问题答案: 您应该能够使用以下命令执行脚本(包含命令序列): 应该可以通过Ansible流程访问。