1. privileged 参数
作用
- 当容器以
--privileged模式运行时,会获得宿主机的几乎所有内核权限(类似于宿主机的 root 权限)。 - 容器可以访问宿主机的设备(如
/dev下的设备),并能够执行一些需要高权限的操作(如修改内核参数、挂载文件系统等)。
使用场景
- 需要容器直接操作宿主机硬件(如 GPU、USB 设备)。
- 运行需要内核级功能的工具(如
systemd、Docker-in-Docker)。 - 调试容器内部问题(如使用
strace或perf工具)。
示例
bash
docker run --privileged -it ubuntu /bin/bash注意事项
- 安全风险:特权模式会破坏容器隔离性,可能被恶意程序利用。
- 替代方案:尽量使用
--cap-add或--device参数授予最小必要权限(如--cap-add SYS_ADMIN)。
2. restart 参数
作用
- 控制容器在退出时的自动重启策略。
- 支持多种策略,确保容器在意外终止或宿主机重启后恢复运行。
可选值
| 值 | 行为 |
|---|---|
no | 默认,不自动重启。 |
on-failure[:max-retries] | 仅在非零退出码时重启(可指定最大重试次数)。 |
always | 无论退出状态如何,始终重启(宿主机重启后也会启动)。 |
unless-stopped | 类似 always,但若容器被手动停止,则不会自动重启。 |
使用场景
- 生产环境中确保服务高可用(如 Web 服务器、数据库)。
- 宿主机重启后自动恢复容器。
示例
bash
docker run --restart=always nginx
docker run --restart=on-failure:5 redis注意事项
always和unless-stopped的区别:always:即使容器被手动停止,宿主机重启后仍会启动。unless-stopped:手动停止后,宿主机重启也不会启动。
3. network 参数
作用
- 指定容器的网络模式,控制容器如何与宿主机、其他容器或外部网络通信。
常见模式
| 模式 | 行为 |
|---|---|
bridge | 默认模式,容器连接到 Docker 的虚拟网桥(docker0),通过 NAT 与外部通信。 |
host | 容器共享宿主机的网络命名空间,直接使用宿主机 IP 和端口。 |
none | 禁用所有网络(仅保留回环接口 lo)。 |
container:<name> | 共享指定容器的网络命名空间。 |
| 自定义网络 | 用户定义的桥接或覆盖网络,支持 DNS 自动发现和多容器通信。 |
使用场景
host:需要高性能网络(如负载均衡器)。bridge:隔离容器网络,适用于大多数场景。- 自定义网络:多容器应用(如微服务)需要内部 DNS 通信。
示例
bash
# 使用宿主机网络
docker run --network=host nginx
# 创建自定义网络并连接容器
docker network create mynet
docker run --network=mynet --name app1 myapp
docker run --network=mynet --name app2 myapp注意事项
host模式会暴露容器端口到宿主机,可能引发端口冲突。- 自定义网络支持更灵活的服务发现(通过容器名通信)。