首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么docker不允许我在没有交互会话的情况下执行二进制文件?

Docker不允许在没有交互会话的情况下执行二进制文件的主要原因是为了确保容器的可移植性、安全性和稳定性。以下是详细解释:

  1. 可移植性:Docker容器是可移植的,可以在任何支持Docker的环境中运行。在容器内执行二进制文件可能依赖于特定的操作系统或库文件版本,这会限制容器的可移植性,使其无法在其他环境中正常工作。通过只在有交互会话的情况下执行二进制文件,Docker确保了容器的可移植性,使得容器在不同的主机上都能正常运行。
  2. 安全性:Docker致力于提供容器隔离,以确保容器之间的相互独立和安全。如果容器可以在没有交互会话的情况下执行任意二进制文件,这可能导致容器内部的恶意代码或恶意行为,威胁到整个系统的安全。通过限制在有交互会话的情况下执行二进制文件,Docker有效地控制了容器内部的操作,提高了容器的安全性。
  3. 稳定性:在没有交互会话的情况下执行二进制文件可能导致无法预料的问题和错误。例如,二进制文件可能依赖于终端交互或读取标准输入等操作,如果没有交互会话,容器无法提供所需的输入,可能导致执行失败或崩溃。通过限制在有交互会话的情况下执行二进制文件,Docker确保了容器的稳定性,减少了不可预测的问题。

总结起来,Docker限制在没有交互会话的情况下执行二进制文件是为了确保容器的可移植性、安全性和稳定性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

第22篇:一次艰难的PostgreSQL不出网提权过程

:其中一个漏洞是CVE-2018-1058,漏洞描述是“PostgreSQL的9.3到10版本中存在一个逻辑错误,导致超级用户在不知情的情况下触发普通用户创建的恶意代码,导致执行一些不可预期的操作”。...echo命令写二进制文件 编译后的提权文件做好了,但是此postgres的docker环境太精简了,很多程序都没有:wget命令不存在、curl不存在、python不存在,而且服务器还不出网,所以通过下载文件方式去写入提权文件...这个提权exp需要交互环境!!!接下来我需要传一个nc啥的反弹shell获取交互环境吗?可是nc也不一定能获取纯交互环境呀。我想到了一个好久没用的工具socat,解决了这个问题。...执行如下命令后,将会获取到一个完全交互式的TTY会话: Vps上监听端口 socat file:`tty`,raw,echo=0 tcp-listen:8888 内网服务器上运行 socat exec:...(下图来源于网络) 分割二进制大文件写入成功 把这个socat单文件转成16进制格式的,通过postgres提权命令执行写入。结果通过ls -lah命令发现文件并没有写进去,原因在哪里呢?

1.5K30

万字长文:彻底搞懂容器镜像构建

大家好,我是张晋涛。 我将在这篇文章中深入 Docker 的源码,与你聊聊镜像构建的原理。 文章过长,目录如下: ?...Docker 架构 (图片来源:docker overview) docker CLI 与 dockerd 的交互是通过 REST API 来完成的,当我们执行 docker version 的时候过滤...但是当开启 stream 模式,对每个文件都进行压缩和解压的操作那将会是很大的资源浪费,同时也增加了其复杂度,所以在 CLI 中便直接进行了限制,不允许同时使用 compress 和 stream 不可同时使用...可使用 .dockerignore 忽略不需要的文件 我在之前的文章中有分享过相关的内容。这里我们看看它的实现逻辑。...这也是为什么有时候你发现自己明明在 Dockerfile 里面写了 COPY xx xx 但是最后没有发现该文件的情况。很可能就是被 .dockerignore 给忽略掉了。

1.1K30
  • 使用 Docker 客户端管理容器:这些命令必须知道

    让我们举一个简单的例子:我们希望立即执行 docker run alpine 以及容器退出,所以我们使用 -it ,这迫使它进行交互并使用当前终端。...因为我想让这个会话在后台运行,所以使用键盘按键 Ctrl + p ,然后 Ctrl + q ,这样重复四次,如下图所示。...如果我们将一个文件复制到第一个容器 (例如 cranky_pike),那么只有这个容器会有该文件, 假设你不记得容器名称或 ID,这种情况下最好的解决方案是习惯性地使用开关(switch) --name...我当前的容器列表是空的,为什么? Docker 客户端命令 docker container list 只列出活动的容器。...要获得所有容器的列表,只需在同一个 Docker 客户端命令的末尾添加开关 --all (如下图所示)。 ? 现在如果我想回到一个特定的容器,去检查一些东西或抓取一个文件,我该怎么做?

    99710

    Docker入门

    容器的名称必须是唯一的,而且有效的名称能够帮助我们理清楚上下级关系,所以明明很重要!!! 重新启动已经停止的容器 例如,我使用docker ps命令没有发现容器正在启动 ?...如果退出 shell 进程,容器也会随之停止运行 创建守护式容器 除了这些交互式运行的容器,我们也可以创建长期运行的容器。守护式容器没有交互式会话,非常适合运行应用程序和服务。...执行命令后,我们看到容器内的所有进程,运行进程的用户,时间,执行指令 容器内部运行进程 在 Docker 1.3 之后,我们可以通过 docker exec 命令在容器内部额外启动新进程。...可以在容器内部运行的进程有两种类型:后台任务和交互式任务。后台任务在容器内部运行并且没有交互需求,而交互式任务保持在前台运行。...接着我们指定了要在容器内部运行的名称以及要执行的命令,在上面的例子中,这条命令会在 daemon_dave 容器中创建一个新的 bash 会话,有了这个会话,我们就可以在该容器中运行其他命令了。

    87630

    Docker入门

    容器的名称必须是唯一的,而且有效的名称能够帮助我们理清楚上下级关系,所以明明很重要!!! 重新启动已经停止的容器 例如,我使用docker ps命令没有发现容器正在启动 ?...如果退出 shell 进程,容器也会随之停止运行 创建守护式容器 除了这些交互式运行的容器,我们也可以创建长期运行的容器。守护式容器没有交互式会话,非常适合运行应用程序和服务。...执行命令后,我们看到容器内的所有进程,运行进程的用户,时间,执行指令 容器内部运行进程 在 Docker 1.3 之后,我们可以通过 docker exec 命令在容器内部额外启动新进程。...可以在容器内部运行的进程有两种类型:后台任务和交互式任务。后台任务在容器内部运行并且没有交互需求,而交互式任务保持在前台运行。...接着我们指定了要在容器内部运行的名称以及要执行的命令,在上面的例子中,这条命令会在 daemon_dave 容器中创建一个新的 bash 会话,有了这个会话,我们就可以在该容器中运行其他命令了。

    82230

    Docker入门

    容器的名称必须是唯一的,而且有效的名称能够帮助我们理清楚上下级关系,所以明明很重要!!! 重新启动已经停止的容器 例如,我使用docker ps命令没有发现容器正在启动 ?...如果退出 shell 进程,容器也会随之停止运行 创建守护式容器 除了这些交互式运行的容器,我们也可以创建长期运行的容器。守护式容器没有交互式会话,非常适合运行应用程序和服务。...执行命令后,我们看到容器内的所有进程,运行进程的用户,时间,执行指令 容器内部运行进程 在 Docker 1.3 之后,我们可以通过 docker exec 命令在容器内部额外启动新进程。...可以在容器内部运行的进程有两种类型:后台任务和交互式任务。后台任务在容器内部运行并且没有交互需求,而交互式任务保持在前台运行。...接着我们指定了要在容器内部运行的名称以及要执行的命令,在上面的例子中,这条命令会在 daemon_dave 容器中创建一个新的 bash 会话,有了这个会话,我们就可以在该容器中运行其他命令了。

    75720

    Docker入门

    容器的名称必须是唯一的,而且有效的名称能够帮助我们理清楚上下级关系,所以明明很重要!!! 重新启动已经停止的容器 例如,我使用docker ps命令没有发现容器正在启动 ?...如果退出 shell 进程,容器也会随之停止运行 创建守护式容器 除了这些交互式运行的容器,我们也可以创建长期运行的容器。守护式容器没有交互式会话,非常适合运行应用程序和服务。...执行命令后,我们看到容器内的所有进程,运行进程的用户,时间,执行指令 容器内部运行进程 在 Docker 1.3 之后,我们可以通过 docker exec 命令在容器内部额外启动新进程。...可以在容器内部运行的进程有两种类型:后台任务和交互式任务。后台任务在容器内部运行并且没有交互需求,而交互式任务保持在前台运行。...接着我们指定了要在容器内部运行的名称以及要执行的命令,在上面的例子中,这条命令会在 daemon_dave 容器中创建一个新的 bash 会话,有了这个会话,我们就可以在该容器中运行其他命令了。

    91820

    在 Docker 容器中编辑文件

    我希望每次在docker容器中安装vi的时候谁会给我1美元...我想要一个在运行的docker容器编辑文件的更简单的方式。首先,尝试避免编辑文件,这违背了容器的哲学理念(见最后一段)。...但是如果你有一个正当的理由,下面教你怎么做。 为什么是Zedapp? 很多时候我使用vi或Atom,就在几个月前我偶然发现了Zedapp,一个自用编辑器。.../run/docker.sock:/var/run/docker.sock \   sequenceiq/zedapp 实际上只有一个单独的二进制zedrem, 我用术语:zed服务器和zed客户端在你使用它或者没有...现在你已经可以启用一个zedrem会话来编辑Docker容器目录内的Zedapp文件了。...– copy(复制)在选择的容器中并启用 ,最后输出zedrem会话的远程链接。

    5.5K50

    还在为线上服务Docker容器权限问题烦恼吗,或许这款神器能助你彻底解决它!

    默认情况下,GoTTY 会加载用户目录下的 .gotty 文件 (~/.gotty) 为配置文件。...你只需在浏览器中打开 http://127.0.0.1:8080/,就会看到运行的命令,仿佛和运行在终端中一样。GoTTY 支持的功能相当丰富,下面我就来看几个比较常用的使用实例。...允许在 Web 终端中运行命令 默认情况下,GoTTY 不允许在 Web 终端中进行输入。但是,你可以使用 -w 或 --permit-write 选项来启用 Web 终端可写入 TTY 的特性。...使用 GoTTY 对容器内部进行管理 众所周知,在 Kubernetes / Docker 环境下,我们需要提供一种能力让研发或者其它相关技术人员可以在不登陆宿主机的情况下直接访问容器或者是查看容器中应用程序的当前状态...首先,我们先启动一个名为 gotty 的新 tmux 会话。 $ gotty tmux new -A -s gotty 其次,在另外一个终端上 attach 上这个 tmux 会话。

    1.1K20

    还在为线上服务 Docker 容器权限问题所烦恼吗,或许这款神器能助你彻底解决它!

    默认情况下,GoTTY 会加载用户目录下的 .gotty 文件 (~/.gotty) 为配置文件。...你只需在浏览器中打开 http://127.0.0.1:8080/,就会看到运行的命令,仿佛和运行在终端中一样。GoTTY 支持的功能相当丰富,下面我就来看几个比较常用的使用实例。...允许在 Web 终端中运行命令 默认情况下,GoTTY 不允许在 Web 终端中进行输入。但是,你可以使用 -w 或 --permit-write 选项来启用 Web 终端可写入 TTY 的特性。...使用 GoTTY 对容器内部进行管理 众所周知,在 Kubernetes / Docker 环境下,我们需要提供一种能力让研发或者其它相关技术人员可以在不登陆宿主机的情况下直接访问容器或者是查看容器中应用程序的当前状态...首先,我们先启动一个名为 gotty 的新 tmux 会话。 $ gotty tmux new -A -s gotty 其次,在另外一个终端上 attach 上这个 tmux 会话。

    44230

    JavaScript 是如何工作的:深入网络层 + 如何优化性能和安全

    相反,有一组相关的机制来限制对 DOM 访问、cookie 和会话状态管理、网络和浏览器的其他组件。 资源和客户端状态缓存 最佳请求是没有重新请求。...在发送请求之前,浏览器会自动检查其资源缓存,执行必要的验证检查,并在满足指定条件的情况下返回资源的本地副本。...如果缓存中没有可用的本地资源,则发出网络请求,并自动将响应放置在缓存中,以便在有权限的情况下进行后续访问。...没有单一的最佳协议或 API。 每个稍微复杂的应用程序都需要根据各种要求混合使用不同的传输:与浏览器缓存的交互,协议开销,消息延迟,可靠性,数据传输类型等。...某些协议可能提供低延迟传送(例如,Server-Sent Events,WebSocket),但可能不符合其他关键标准,例如在所有情况下利用浏览器缓存或支持有效二进制传输的能力。

    81330

    LSM vs SECCOMP

    为什么不能将Seccomp设计为LSM模块?什么时候使用Seccomp?接下来,且听我娓娓道来。 Secomp和LSM都可以让内核限制进程与系统的交互,但却有大大的不同。...CPUShare需要限制这种不可信的二进制代码,以便只能读取输入,运算,然后输出结果。除此之外,不允许任何操作。...但是,通过LSM实现相同的功能就会非常复杂,因为进程的标准输出可能会重定向到不同内核对象(设备,文件,管道),而LSM本身又没有提供将这些对象映射到文件描述符的方法。...最接近的方法是使用systemd的系统调用过滤器或者在容器中使用seccomp过滤器(比如docker) 即使使用systemd的系统调用过滤器和docker seccomp策略,seccomp过滤器的管理最好还是由应用程序开发者实现...因为应用开发者比系统管理员更清楚他们的应用程序需要哪些系统调用。另外,在应用程序改变时,开发者更清楚在哪里更新这些过滤器。 结论 LSM和seccomp都提供了限制进程与系统交互的机制。

    75430

    Brigade:保护软件供应链需要永恒的警惕

    但是你还在以某种形式构建和发布二进制文件吗?你的二进制文件只能和编译它们的编译器一样安全。 你在构建 Docker 镜像吗?你捆绑到镜像中的软件只能与你开始使用的基本镜像一样安全。...这意味着我们可以将一个 Go 二进制文件放在一个 Docker 镜像上,这个镜像实际上不包含任何内容,并且仍然是可执行的。让我们试一试。...第一阶段使用 golang:1.18 镜像作为其基础(Grype 在该镜像中发现了 347 个漏洞),但第二阶段将第一阶段构建的静态链接二进制文件的副本放置在最小的 Docker 基础镜像 scratch...我们遇到的第一个问题是,在我们的软件极有可能需要与外界交互的情况下,缺少任何系统级的包意味着缺少任何类型的 SSL 信任存储。祝你能顺利使用 HTTPS。...在构建的第二阶段,我们甚至无法运行 useradd 二进制文件来创建替代用户。

    41820

    WASM能否取代Docker?

    它引入了新的抽象层次,使WASM二进制文件可以“编译一次,就能在任何地方运行”,而与底层平台无关。这就是去年让我对WASM感到兴奋的原因,也是引发我在本周刊中发表这篇文章的原因。...当我在对服务进行Docker化时,我意识到:“为什么不能将我的Rust微服务编译成WASM,并像无服务器功能一样在我的基础架构上按原样运行它?”就在那时,我开始研究WASM在无服务器环境中的使用。...我已经使用Kubernetes来管理我的部署(因此,对微服务进行Docker化),为什么我不能在没有附加虚拟化的情况下运行原始WASM二进制文件,就像在Kubernetes上运行Docker容器一样。...“重要的是,WASM在很高的层面上具备两个主要特征,Kubernetes生态系统或许能够利用它的优势: 与容器相比,WASM及其运行时可以快速执行并且体积非常小 WASM在默认情况下不能做任何事情;只有在明确的权限下才能执行...仅通过LXC,容器的执行还是会受限于底层的体系结构,比如,你试过在Windows在运行Docker嘛?我懂你的困难。

    2K3310

    使用 Kubernetes 模糊测试

    例如,也许我们关心给定二进制文件的 ELF 导入解析部分的最新更改。在这种情况下,我们可以围绕 .dynsym/.dynamic/etc... 部分构建我们的突变。...新构建的 docker fuzzingharness 镜像构建完成后的最终 Jenkins 构建执行rollout restart以获取 Kubernetes 部署中的新 Docker 镜像。...通过在 gdb 中逐步执行应用程序的最终验证显示 strdup 存在相同的问题并且无法访问内存。 最后,我们对崩溃是如何发生的有了一个很好的了解,但是为什么?...这个函数调用在一个迭代程序段的存根中。在某些情况下 name不会设置为任何值,因此 strdup 没有字符串可以复制。这显示在下面的代码片段中。幸运的是,这是一个简单的解决方法,并且PR 已入站!...我只是在“用剪刀跑步”,这个周末没有花时间去做。 问题:复制崩溃 Minikube 会为每个部署的 kvm 节点创建一个专用的 ssh 密钥对。

    1.6K20

    5个你必须知道的Docker实用工具

    为了帮助你,我已经收集了我日常工作中用到的很有趣很实用的Docker工具。这些让我工作更加高效,消除了很多的手动工作。 让我们来看看我在使用Dockerize工具的过程中发现的每个工具。...在上面显示的命令中,我们安装了Docker套接字文件,以便docker-gc可以与Docker API进行交互。我们设置一个环境变量DRY_RUN = 1,以查找哪些容器和镜像将被删除。...上述命令的输出如下: 如果您还想使用docker-gc清理,则可以再次运行没有DRY_RUN标志的docker-gc来执行清理。 上述命令的输出将告诉您docker-gc删除的所有镜像和容器。...要使用docker-slim,您必须从Github下载其二进制文件。二进制文件可用于Linux和Mac。下载二进制文件后,将其添加到PATH中。...在我的个人项目中,我发现它在大多数情况下都有效。 您可以从其文档中了解更多关于docker-slim的信息。

    1.3K90

    Docker运行命令示例

    从版本1.13开始,Docker CLI进行了重组,并且所有命令都被分组在与之交互的对象下。 由于run命令与容器交互,因此它现在是docker container的子命令。...在前台中运行容器 默认情况下,当docker run命令未提供任何选项时,根进程将在前台启动。这意味着来自根进程的标准输入,输出和错误将附加到终端会话。...在退出后移除容器 默认情况下,当容器退出时,其文件系统将保留在主机系统上。...--rm选项告诉docker run命令在容器自动退出时将其删除: docker container run --rm nginx 在容器退出后,Nginx映像可能不是清理容器文件系统的最佳示例。...此选项通常用于执行短期任务(例如测试或数据库备份)的前台容器。 设置容器名称 在Docker中,每个容器都通过UUID和名称来标识。

    1.2K10

    三个技巧,将Docker镜像体积减小90%【面试+工作】

    三个技巧,将Docker镜像体积减小90%【面试+工作】 ? 在构建Docker容器时,应该尽量想办法获得体积更小的镜像,因为传输和部署体积较小的镜像速度更快。...为什么使用&&?而不是使用两个RUN语句代替呢?比如: ? 从Docker 1.10开始,COPY、ADD和RUN语句会向镜像中添加新层。前面的示例创建了两个层而不是一个。 ?...但distroless版本是原始操作系统的精简版,没有了额外的二进制文件,所以容器里没有shell! 在没有shell的情况下,如何attach到正在运行的容器呢? 答案是,你做不到。...之所以说是坏消息,因为你只能在容器中执行二进制文件。你可以运行的唯一的二进制文件是Node.js: ?...添加到Docker镜像的每个二进制文件都会给整个应用程序增加一定的风险。 只在容器中安装一个二进制文件可以降低总体风险。

    1.5K10
    领券