在腾讯云服务器(CVM)上使用 Docker,核心在于安全组规则的配置。Docker 本身默认运行在本地回环地址(127.0.0.1),但如果你需要让外部访问容器内的服务,或者使用 Docker 远程 API,则必须开放相应的网络端口。
以下是具体的权限与端口配置指南:
1. 核心端口配置(安全组规则)
这是最关键的一步。你需要登录腾讯云控制台,找到该实例关联的安全组,添加入方向规则。
A. 业务端口(必选)
如果你的 Docker 容器内运行了 Web 服务(如 Nginx、Tomcat、Node.js 等)、数据库(MySQL、Redis)或自定义应用,必须放行对应的业务端口。
- HTTP:
80 - HTTPS:
443 - SSH (管理服务器):
22(如果未修改默认端口,通常已开启) - 其他自定义端口: 例如你映射的
8080,3000,5432等。
注意:在 Docker 中,端口是通过
-p 宿主机端口:容器端口映射的。你在安全组中放行的必须是宿主机端口。
B. Docker 远程管理端口(可选,仅当你需要远程管理时)
如果你需要在本地电脑通过 docker 命令远程控制这台云服务器的 Docker 引擎(即使用 DOCKER_HOST=tcp://IP:2375),则需要开放以下端口:
- TCP 2375: 未加密的 Docker 远程 API(不推荐,除非配合 SSH 隧道)。
- TCP 2376: 加密的 Docker 远程 API(需配置 TLS 证书,安全性高)。
安全警告:严禁直接将 2375 端口对公网(0.0.0.0/0)开放,这会导致你的服务器被任意接管。建议仅在特定 IP 段开放,或通过 SSH 隧道访问。
2. 系统内核与文件权限
除了网络端口,Docker 正常运行还需要操作系统层面的基础支持:
A. 内核模块
Docker 依赖 Linux 内核特性(如 cgroups, namespaces, overlay2 存储驱动等)。
- CentOS/RHEL: 确保开启了
overlay2模块(现代版本默认开启)。 - Ubuntu/Debian: 默认支持良好。
- 操作: 无需手动开启特殊“权限”,只需确保内核未被过度裁剪。
B. 用户权限
- Root 权限: Docker 守护进程(dockerd)通常需要 root 权限启动。
- 非 Root 运行: 为了安全,建议将当前用户加入
docker用户组,避免每次都要输sudo:sudo usermod -aG docker $USER # 执行后需重新登录或执行 newgrp docker 生效
C. 防火墙(iptables/nftables)
Docker 安装后会自动配置 iptables 规则来管理容器网络。
- 不要手动禁用 iptables,否则可能导致容器无法通信。
- 如果使用了
firewalld(CentOS) 或ufw(Ubuntu),请确保它们没有拦截 Docker 创建的网桥流量。通常 Docker 安装脚本会自动处理这些冲突。
3. 配置示例总结
假设你有一台 CentOS 7 服务器,要运行一个映射到宿主机 8080 端口的 Nginx 容器:
-
腾讯云控制台操作:
- 进入实例详情 -> 安全组。
- 添加入方向规则:
- 协议类型:TCP
- 端口范围:
8080 - 授权对象:
0.0.0.0/0(允许所有 IP) 或指定特定 IP。
- (可选) 添加入方向规则:
22(SSH)。
-
服务器内部操作:
- 安装 Docker (略)。
- 启动容器:
docker run -d -p 8080:80 --name my-nginx nginx - 验证:浏览器访问
http://<服务器公网IP>:8080。
常见误区提醒
- 误区:认为只要开了 Docker 就能直接访问。
- 真相:如果不开放安全组,即使容器在跑,外部也无法连接。
- 误区:直接在 Docker 命令里写
-p 0.0.0.0:8080:80就能通。- 真相:这只告诉 Docker 监听宿主机的 8080 端口,但云厂商的安全组(防火墙)依然会拦截流量,必须双重检查。
- 误区:开放 2375 端口方便管理。
- 真相:极度危险,极易导致服务器沦陷。请使用 SSH 隧道 (
ssh -L) 或配置 TLS 证书。
- 真相:极度危险,极易导致服务器沦陷。请使用 SSH 隧道 (
结论:最核心的操作是在腾讯云控制台的“安全组”中放行你业务容器所映射的“宿主机端口”。
PHPWP博客