华为云国际站官网开户 华为云部署Docker容器
你有没有试过,在本地 Docker 里跑得好好的服务,一上云就“人间蒸发”?端口打不开、容器秒退、日志一片空白、安全组像迷宫、公网 IP 像个谜……别急,这不是你的错——是华为云没告诉你,它其实挺喜欢跟你玩捉迷藏的。
今天这篇,不画大饼,不甩术语,不贴官方文档截图,就用你打开终端那一刻的真实视角,带你把一个最普通的 Nginx 容器,从零部署到华为云 ECS 上,并且让它能被全世界(至少你家路由器)访问到。过程中你会遇到:安全组默认全封、firewalld 暗中使绊、dockerd 启动失败却报错含糊、docker run -p 写对了却还是连不上、curl localhost:80 成功但 curl 公网IP:80 超时……这些,我们一个个拆、一个个修、一个个记进小本本。
第一步:挑一台不抠门的 ECS
华为云国际站官网开户 登录华为云控制台 → 弹性云服务器 → 创建实例。别选“通用计算型 S6”,那玩意儿像租了个带WiFi的电风扇——便宜,但干不动 Docker。推荐“通用计算型 S7”起步,2核4G够你跑三五个轻量级容器。系统镜像选 Ubuntu 22.04 LTS(稳定、社区支持猛、apt 不抽风),或者 CentOS 7.9(如果你和 systemd 有感情)。别碰 openEuler 初学者版——不是它不好,是你第一次部署时,真不想在 SELinux 和 cgroup v2 的夹缝里找人生意义。
磁盘选 100GB 高IO(别省那几块钱,/var/lib/docker 很能吃空间),网络一定勾选“分配弹性公网IP”,并记住这个 IP——它将是未来你 curl、浏览器输入、女朋友问“你那个网站好了吗”的唯一入口。
第二步:安全组?不是防火墙,是门禁卡+保安队长
很多人卡在这一步,死活不通。华为云的安全组,默认规则是:所有入方向拒绝,所有出方向放行。它不是 Linux 的 iptables,但它比 iptables 更“懂事”——它会主动拦下你忘了放行的每一个端口。
进控制台 → 网络与CDN → 虚拟私有云 → 安全组 → 找到你刚建 ECS 绑定的那个组 → 编辑入方向规则。加三条:
- 类型:SSH,协议:TCP,端口:22,源地址:0.0.0.0/0(允许你远程登录)
- 类型:HTTP,协议:TCP,端口:80,源地址:0.0.0.0/0(让全世界能访问你的网页)
- 类型:自定义TCP,协议:TCP,端口:3000-3005(留着给 Node.js、Spring Boot 们排队用)
保存后,别关页面——等下还得回来加一条:如果跑的是 HTTPS,记得补 443;如果容器暴露的是 5000,就得单独加一条 5000。安全组不认“容器端口”,它只认“ECS 的网卡收到哪个端口的数据包”。记住了:Docker 的 -p 80:80 是告诉 Docker 把宿主机 80 映射给容器 80;而安全组决定——宿主机 80 这个门,到底开不开。
第三步:连上去,先卸载 firewalld(CentOS 用户请举手)
SSH 登录:ssh -i your-key.pem [email protected](Ubuntu)或 ssh -i your-key.pem [email protected](CentOS)。
CentOS 用户请立刻执行:sudo systemctl stop firewalld && sudo systemctl disable firewalld。别犹豫,别查文档,别想“它是不是和 Docker 兼容”——它不兼容,它会默默吞掉你 -p 映射的流量,还假装一切正常。Ubuntu 默认没开 ufw,可以跳过,但建议顺手 sudo ufw status 看一眼,如果是 active,sudo ufw allow OpenSSH && sudo ufw allow 80。
第四步:装 Docker?别信一键脚本
华为云镜像源有时慢得像拨号上网。别用 curl -fsSL https://get.docker.com | sh ——它可能卡在下载 docker-ce-cli 上,然后给你留个半残躯壳。
Ubuntu 推荐法:sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-releasecurl -fsSL https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgecho "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
装完验证:sudo docker run hello-world。如果输出一段带鲸鱼的欢迎词,恭喜,你已通关 60%。
第五步:跑一个真·能访问的容器
来个最朴实的:sudo docker run -d --name my-nginx -p 80:80 nginx:alpine。
解释一下参数:-d 后台运行(别卡在终端);--name 给容器起名,方便后续 docker logs my-nginx;-p 80:80 宿主机 80 → 容器 80;nginx:alpine 轻量,启动快,适合测试。
检查:sudo docker ps,看到 STATUS 是 Up xxx seconds,PORTS 显示 0.0.0.0:80->80/tcp,就对了。
本地测:curl http://localhost → 返回一堆 HTML?OK。
外网测:curl http://你的公网IP → 如果也返回 HTML,恭喜!你已站在云端,脚下是容器,头顶是自由。
第六步:如果 curl 失败?别删容器,先查这四件事
- docker ps 看容器是否真在跑? 如果没显示,
sudo docker logs my-nginx看启动报错(常见:端口被占、配置文件损坏) - netstat -tuln | grep :80 看宿主机 80 是否被 nginx/apache 占了?有就
sudo systemctl stop nginx - sudo docker port my-nginx 确认映射是否生效(应输出
80/tcp -> 0.0.0.0:80) - 再看一遍安全组! 是不是只放行了 8080,却写了 -p 80:80?
第七步:进阶——加个 Nginx 反向代理(为多容器准备)
以后你肯定不止一个容器。比如:前端跑 3000,API 跑 8080,管理后台跑 9000。全开安全组太野,也不安全。这时候,让 Nginx 当“前台接待员”:
sudo docker run -d --name nginx-proxy -p 80:80 -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro -v $(pwd)/html:/usr/share/nginx/html:ro nginx:alpine
其中 nginx.conf 长这样(精简版):
events { worker_connections 1024; }
http {
server {
listen 80;
location /api/ { proxy_pass http://host.docker.internal:8080/; }
location / { root /usr/share/nginx/html; index index.html; }
}
}
注意:host.docker.internal 在华为云 ECS 的 Docker Desktop 不适用,但原生 Docker 支持(需 20.10+)。如不识别,改用 ECS 内网 IP(ip addr show docker0 | grep inet 查 bridge IP,通常是 172.17.0.1)。
最后送你一句保命口诀:
容器跑不起来?先 docker ps;
访问不到?先 curl localhost;
localhost 行,公网不行?查安全组;
安全组开了还不行?关 firewalld;
全做了还不行?重启 ECS,别硬扛——云服务器重启,比你咖啡续命还快。
部署不是终点,而是日常运维的起点。下次,咱们聊怎么用华为云 SWR 托管私有镜像、用 CCE 管理百容器集群、以及——为什么你写的健康检查脚本,总在凌晨三点把你钉钉吵醒。
如果需要更深入咨询了解可以联系全球代理上TG: @cloudcup 他们在云平台领域有更专业的知识和建议,他们有国际阿里云,国际腾讯云,国际华为云,aws亚马逊,谷歌云一级代理的渠道,微软云开户充值。oss防风控上传加密系统。客服1V1服务,支持免实名、免备案、免绑卡。开通即享专属VIP优惠、充值秒到账、官网下单享双重售后支持。