假设我有一个docker映像,并将其部署在某些服务器上。但是我不希望其他用户访问该图像。是否有加密docker映像的好方法?
实际上,不,如果用户有权运行docker守护程序,那么他们将有权访问所有图像-这是由于docker要求更高的权限才能运行。
有关为什么这样做的更多信息,请参阅Docker安全指南的摘录。
Docker守护程序攻击面
使用Docker运行容器(和应用程序)意味着运行Docker守护进程。该守护程序当前需要root特权,因此您应该注意一些重要的细节。
首先,应仅允许受信任的用户控制您的Docker守护程序。这是一些强大的Docker功能的直接结果。具体来说,Docker允许您在Docker主机和来宾容器之间共享目录。并且它允许您这样做,而不会限制容器的访问权限。这意味着您可以启动一个容器,其中/
host目录将是主机上的/目录;并且该容器将能够不受任何限制地更改您的主机文件系统。这类似于虚拟化系统允许文件系统资源共享的方式。没有什么可以阻止您与虚拟机共享根文件系统(甚至根块设备)。这具有很强的安全隐含性:例如,如果从Web服务器检测Docker以通过API设置容器,则在进行参数检查时应比平时更加谨慎,以确保恶意用户无法传递导致Docker的特制参数。创建任意容器。
因此,REST API端点(由Docker CLI使用以与Docker守护程序进行通信)在Docker
0.5.2中进行了更改,现在使用UNIX套接字而不是绑定在127.0.0.1上的TCP套接字(后者倾向于如果您碰巧直接在虚拟机外部的本地计算机上运行Docker,则将进行跨站点请求伪造攻击)。然后,您可以使用传统的UNIX权限检查来限制对控制套接字的访问。如果您明确决定这样做,也可以通过HTTP公开REST
API。但是,如果您这样做了,请注意上述安全隐患,应确保只有从受信任的网络或VPN才能访问该安全隐患。或使用例如通道和客户端SSL证书进行保护。您还可以使用HTTPS和证书保护它们。该守护程序还可能容易受到其他输入的攻击,例如使用“ docker load”从磁盘或通过“ docker
pull”从网络加载映像。这一直是社区改进的重点,尤其是对于“拉动”安全性。尽管这些重叠,但应注意,“ docker
load”是用于备份和还原的机制,当前不被视为用于加载映像的安全机制。从Docker 1.3.2开始,现在在Linux /
Unix平台上的chroot子进程中提取图像,这是朝着特权分离的更广泛努力的第一步。最终,预计Docker守护程序将运行受限制的特权,委派经过良好审计的操作子进程,每个子进程都具有自己(非常有限)的Linux功能,虚拟网络设置,文件系统管理等范围。
,Docker引擎本身的片段将在容器内部运行。最后,如果您在服务器上运行Docker,建议仅在服务器上运行Docker,并在Docker控制的容器内移动所有其他服务。当然,保留您喜欢的管理工具(可能至少是SSH服务器)以及现有的监视/监督过程(例如,NRPE,收集的等)是很好的。
问题内容: 有什么方法可以手动下载Docker映像吗? 我的互联网连接速度非常慢,对我来说,最好获得图像的链接,然后以更高的互联网速度将其下载到其他位置, 如何获取由docker pull管理的映像的直接URL? 问题答案: 可能会得到,但让我提出另外两种建议! 如果可以通过快速连接连接到远程服务器,并且该服务器可以运行Docker,则可以在该服务器上,然后将映像(及其所有层和元数据)导出为tar
问题内容: 我们可以使用没有源映像(OS)的docker文件创建docker映像吗 我们不希望在所有应用程序docker映像中使用基本映像(centos或rhel)。我们想要将基本映像(centos或rhel)与应用程序映像分开,并在运行时将它们链接起来。可能吗? 当我 不使用 或构建docker映像时,docker抱怨:“提交前提供源映像” 我的docker文件如下所示: 问题答案: 您说过:“
问题内容: 我有一个泊坞窗映像,我想找出它是从哪个映像创建的。当然有多层,但是我想找出最后一张图像(dockerfile中该图像的FROM语句)? 我尝试使用,但无法在其中找到此信息。 我尝试使用以下命令,但它给我一条错误消息 这是我收到的错误消息 问题答案: 您可以使用此答案中建议的方法:https : //stackoverflow.com/a/53841690/3691891 首先,拉: 获
问题内容: 我做了一个相当大的Docker容器。当我提交容器以创建映像时,该映像大约有7.8 GB。但是,当我将容器(不是映像!)放到压缩包中并重新导入时,映像只有3 GB。当然,历史已经丢失了,但是对我来说这没关系,因为我认为映像已“完成”并准备部署。 如何展平图像/容器而不将其导出到磁盘并再次导入? 并且:这样做是一个明智的主意,还是我错过了一些重要的观点? 问题答案: 从Docker 1.1
问题内容: 我有以下图像: 当我尝试删除其中之一时,我得到: 如何删除它们?为什么会有这样的冲突? 问题答案: 为了删除所有图像,请使用给定命令 为了删除所有容器,请使用给定命令 警告:这将破坏您的所有图像和容器。 将无法还原它们! 该解决方案由Techoverflow.net提供。
我已经在本地机器中设置了Odoo docker容器,并且能够运行Odoo服务器。但我想创建自定义模块。我如何访问容器映像内部的Odoo源代码并进行一些更改?