1. exec能进入停止的容器中吗

不能通过exec 进入已经停止的容器中。


2. 能复制文件到停止容器中,或者能从停止的容器中复制出文件吗

即使容器已经停止,仍然可以通过 docker cp 命令将文件复制到容器中或从容器中复制出来。这是因为 docker cp 操作的是容器的文件系统,而不是依赖于容器是否正在运行。


3. docker实现原理有哪些

Docker 的实现原理主要包括 Namespaces(隔离性)、Cgroups(资源控制)、UnionFS(联合文件系统) 和 容器运行时(生命周期管理)。


4. 什么是Namespace

Namespace(命名空间) 是 Linux 内核提供的一种轻量级系统资源隔离机制,允许将系统资源(如进程、网络、文件系统等)划分到不同的命名空间中,使得每个命名空间拥有独立的资源视图。


5. 什么是cgroup

Cgroup(Control Group) 是 Linux 内核提供的一项功能,用于对进程组使用的资源进行限制、统计和优先级控制。它是 Docker 等容器技术实现 资源隔离与限制 的核心技术之一。


6. 什么是联合文件系统

联合文件系统(UnionFS) 是一种分层、轻量级的文件系统,它允许将多个目录(称为分支)合并成一个统一的视图,使得用户或应用程序可以像操作普通文件系统一样访问这些合并后的文件,为 Docker 提供了镜像分层、高效存储和容器文件系统隔离的能力,是 Docker 镜像构建与运行的核心依赖之一。


7. docker有哪些网络模式,分别用于什么场景

网络模式

是否共享 IP

是否能访问外网

是否支持容器间通信

典型应用场景

bridge

默认模式、单机部署

host

高性能、调试、监控

none

安全沙箱、定制网络

container

Sidecar 模式、日志收集

custom

是(支持 DNS)

微服务、稳定通信

overlay

是(跨主机)

集群部署、Swarm/K8s


8. docker与containerd有什么关系

Docker 是一个面向用户的完整容器平台,而 containerd 是其背后的容器运行时,负责实际的容器管理和执行;containerd 更适合用于生产环境或 Kubernetes 等系统中,强调标准化和高性能。


9. 安装docker时会安装containerd吗

安装 Docker 时会默认安装 containerd,因为它是 Docker 实现容器运行的核心依赖组件。


10. 如果只安装containerd,与安装docker对比,会缺失哪些功能

只安装 containerd 相比安装 Docker,会缺少镜像构建、网络/卷管理、Compose 编排、调试接口等上层功能,但保留了容器运行的核心能力,适合用于 Kubernetes 等生产级平台。


11. 使用普通用户运行docker容器,是否有安全隐患

使用普通用户运行 Docker 容器本身是可行的,但必须严格控制其权限、限制容器能力,并避免以 root 用户运行容器内部进程,否则仍存在容器逃逸、数据泄露等重大安全隐患。


12. 制作Dockerfile时如何指定使用普通用户身份运行进程

加入参数USER

USER 用户名


13. 容器使用普通用户身份运行进程,有什么优缺点

优点:

优势

描述

提升安全性

避免容器内进程拥有 root 权限,降低因漏洞或攻击导致宿主机被提权的风险。

遵循最小权限原则

容器内应用仅拥有运行所需的基本权限,减少潜在攻击面。

防止误操作破坏系统文件

普通用户对宿主机关键目录无写权限,避免因挂载不当造成数据损坏。

符合生产环境规范

很多 CI/CD 平台和安全扫描工具要求容器以非 root 用户运行。

兼容 Rootless 模式

更容易迁移到 Docker 的 Rootless 模式,进一步增强安全性。

缺点:

劣势

描述

配置稍复杂

需要在 Dockerfile 中手动创建用户和组,并设置 USER 指令。

部分端口受限

如果服务需要绑定低于 1024 的端口(如 80、443),普通用户无法直接绑定,需额外配置(如使用 --cap-add=NET_BIND_SERVICE 或反向代理)。

依赖权限控制

若挂载了宿主机目录,必须确保该用户有对应路径的读写权限,否则会报错。

镜像构建阶段仍可能使用 root

构建过程中安装软件包时通常仍需 root 权限,只能在最后运行阶段切换到普通用户。


14. docker挂载目录时,:(冒号)前使用路径和只写名称有什么区别

冒号前写完整路径表示挂载宿主机的具体目录;只写名称表示使用 Docker 自动管理的命名卷,后者更安全、便于维护,推荐用于生产环境。


15. 我想将镜像中的目录挂载到宿主机上,:(冒号)应该使用路径还是命名卷?比如启动一个Mysql容器时,将数据库原本的数据文件挂载到宿主机上。

如果是测试与开发环境下应该使用路径,在生产环境下则应该使用命名卷。

以他人的幸福为幸福,以他人的享乐为享乐。