news 2026/7/7 4:46:36

从零开始在 CentOS 7 上部署 Docker:我的实战踩坑记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零开始在 CentOS 7 上部署 Docker:我的实战踩坑记录

写在前面

这是我 Docker 学习之路的第二篇文章。前一篇《从虚拟机到容器:Docker 解决了什么问题》讲了概念,这篇来点硬核的——真实环境下的部署实战

从网络配置到镜像拉取,从 Dockerfile 编写到 Docker Compose 编排,我把这几天的踩坑经历全部记录下来,希望能帮到同样在折腾 Docker 的你。

一、环境准备

我的实验环境:

宿主机:Windows 10

虚拟机:VMware 上的 CentOS 7

Docker 版本:最终升级到 Docker CE 26.1.4

目标:在 CentOS 7 上完整部署 Docker,并成功运行 nginx + mysql 多容器应用。

二、第一个坑:网卡没有启动

装完虚拟机后,我发现网络不通。执行ping 8.8.8.8提示网络不可达。

问题排查

// bash
[root@localhost ~]# ping -c 3 8.8.8.8
connect: 网络不可达

[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP> ...
inet 127.0.0.1/8 scope host lo
2: ens33: <BROADCAST,MULTICAST> ...
# 注意:这里没有 inet 地址,状态也不是 UP
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> ...
inet 172.17.0.1/16 scope global docker0

关键发现:ens33网卡状态是DOWN,没有分配到 IP 地址。

解决方案

// bash
# 启动网卡
ip link set ens33 up

# 通过 DHCP 获取 IP
dhclient ens33

# 验证
ip addr show ens33
# 现在可以看到:inet 192.168.120.131/24

# 测试网络
ping -c 3 8.8.8.8
# 64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=201 ms ✓

教训:CentOS 7 最小化安装后,网卡默认可能没有设置为开机自启。

三、第二个坑:DNS 配置缺失

网络通了,但 Docker 还是拉不到镜像。报错:

Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on [::1]:53: read udp [::1]:46940->[::1]:53: read: connection refused

问题分析

// bash
[root@localhost ~]# cat /etc/resolv.conf
# Generated by NetworkManager
# 空的!没有 nameserver

根本原因:DNS 配置为空,无法解析域名。

解决方案

// bash
# 配置公共 DNS
echo "nameserver 114.114.114.114" > /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf

# 验证
cat /etc/resolv.conf
# nameserver 114.114.114.114
# nameserver 8.8.8.8

# 测试解析
ping -c 3 registry-1.docker.io

注意:如果/etc/resolv.conf被 NetworkManager 覆盖,需要修改 NetworkManager 配置或手动固定 DNS。

四、第三个坑:Docker 镜像拉取失败

DNS 修好了,但拉取镜像还是超时:

Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection

原因分析

国内网络访问 Docker Hub 不稳定,需要配置镜像加速器。

解决方案一:配置阿里云镜像加速

1.登录阿里云容器镜像服务

2.点击「镜像加速器」获取你的专属加速地址

3.配置到 Docker:

// bash
cat > /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": ["https://你的专属地址.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload
systemctl restart docker

解决方案二:安装 Docker CE(推荐)

CentOS 7 自带的 Docker 版本太老(1.13),对镜像加速支持不完善。升级到 Docker CE:

// bash
# 卸载旧版本
yum remove -y docker docker-common docker-client

# 添加阿里云 Docker CE 仓库
yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装 Docker CE
yum install -y docker-ce docker-ce-cli containerd.io

# 启动并设置开机自启
systemctl start docker
systemctl enable docker

# 验证版本
docker --version
# Docker version 26.1.4, build 5650f9b

关键收获:CentOS 7 自带的docker包和 Docker 官方的docker-ce是两个不同的东西,后者功能更完整、更新更及时。

五、Dockerfile 实战:构建自定义镜像

基础概念掌握了,来动手写个 Dockerfile。

目标

构建一个包含自定义首页的 nginx 镜像,不依赖外部 volume 挂载。

实现步骤

// bash
# 创建项目目录
mkdir ~/my-nginx && cd ~/my-nginx

# 创建 Dockerfile
cat > Dockerfile << 'EOF'
FROM nginx:latest
COPY index.html /usr/share/nginx/html/index.html
EOF

# 创建自定义首页
echo "<h1>这是我的第一个 Dockerfile 构建的镜像</h1>" > index.html

# 构建镜像
docker build -t my-nginx:v1 .

# 查看镜像
docker images | grep my-nginx
# my-nginx v1 b13e6ca12d9a 2 minutes ago 161MB

# 运行容器
docker run -d -p 8082:80 --name my-nginx-test my-nginx:v1

访问http://192.168.120.131:8082,成功看到自定义页面!

Dockerfile 要点:

FROM:指定基础镜像

COPY:将本地文件复制到镜像

docker build -t 镜像名:标签 .:注意最后的.表示当前目录

六、Docker Compose:多容器编排

单个容器搞定了,接下来挑战多容器应用。

目标

用 docker-compose 同时启动 nginx + mysql,并实现数据持久化。

实现步骤

// bash
# 创建项目目录
mkdir ~/docker-compose-demo && cd ~/docker-compose-demo

# 创建 docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3'
services:
nginx:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html

mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: testdb
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql

volumes:
mysql-data:
EOF

# 创建自定义页面
mkdir html
echo "<h1>Docker Compose 测试成功</h1>" > html/index.html

# 启动所有服务
docker compose up -d # 注意:新版是 docker compose,不是 docker-compose

# 查看状态
docker compose ps

# 查看日志
docker compose logs

踩坑提醒:

旧版命令是docker-compose,需要单独安装

新版(Docker 20+)内置了docker compose(空格分隔)

如果你的系统报docker-compose: 未找到命令,试试docker compose

七、核心概念总结

1. Volume 数据持久化

// bash
# 绑定挂载(Bind Mount)
-v ~/nginx-data/html:/usr/share/nginx/html

# 命名卷(Named Volume)
-v mysql-data:/var/lib/mysql

区别:

绑定挂载:直接映射宿主机目录,适合开发环境

命名卷:由 Docker 管理,适合生产环境,更易迁移

2. 端口映射

// bash
-p 8080:80 # 宿主机 8080 → 容器 80

3. 网络模式

bridge(默认):容器有独立 IP,通过端口映射访问

host:容器直接使用宿主机网络

none:无网络连接

八、踩坑清单

问题

现象

解决方案

网卡未启动

ping 不通外网

ip link set ens33 up && dhclient ens33

DNS 配置缺失

域名解析失败

配置/etc/resolv.conf添加 nameserver

镜像拉取超时

Docker pull 失败

配置镜像加速器或升级 Docker CE

Docker 版本过旧

功能不完整

卸载旧版,安装 Docker CE

docker-compose 未安装

命令找不到

使用docker compose或单独安装

参考资料

Docker 官方文档

阿里云 Docker CE 镜像

Docker Compose 官方文档

写在最后

从零开始在 CentOS 7 上部署 Docker,看似简单的任务,实际操作中遇到了不少坑。但每一个坑都是一次学习的机会:

网络问题让我理解了 Linux 网络配置

镜像拉取失败让我学会了配置加速器

Dockerfile 编写让我掌握了镜像构建原理

Docker Compose 让我体验到了多容器编排的便利

如果你也在学 Docker,我的建议是:

1.不要只看教程,一定要动手实操

2.遇到问题先查日志,90% 的问题都能自己解决

3.把踩过的坑记录下来,这就是你最好的学习笔记

下一篇,我将记录如何用 Docker Compose 部署完整的 Web 应用,敬请期待!

系列文章:

从虚拟机到容器:Docker 解决了什么问题

从零开始在 CentOS 7 上部署 Docker:我的实战踩坑记录(本文)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 4:44:53

终极GTA5安全防护菜单:YimMenu完全使用指南

终极GTA5安全防护菜单&#xff1a;YimMenu完全使用指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu Y…

作者头像 李华
网站建设 2026/7/7 4:43:46

网站优化提速!KKCE在线Ping优选IPv6 CDN边缘节点

双栈网站接入CDN后&#xff0c;IPv6节点调度不均常导致部分用户加载卡顿&#xff0c;盲目调整权重无数据支撑。KKCE全域在线Ping&#xff0c;量化各CDN边缘节点IPv6链路质量&#xff0c;指导精准调度优化。平台从全国三网及海外节点&#xff0c;对网站IPv6 CDN地址发起高频在线…

作者头像 李华
网站建设 2026/7/7 4:43:26

构建自定义加密库:从算法封装到密钥管理的工程实践

1. 项目概述&#xff1a;为什么我们需要一个自定义加密库&#xff1f;在当今的软件开发中&#xff0c;数据安全早已不是“可选项”&#xff0c;而是“必选项”。无论是用户密码、支付信息&#xff0c;还是核心业务数据&#xff0c;加密都是保护它们的第一道防线。然而&#xff…

作者头像 李华
网站建设 2026/7/7 4:41:46

常德本地环保装修哪家技术强

在常德&#xff0c;装修是许多家庭都会面临的大事&#xff0c;而环保装修更是成为了大家关注的焦点。毕竟&#xff0c;谁都希望自己的家不仅美观舒适&#xff0c;更要健康环保&#xff0c;能让家人住得安心。然而&#xff0c;市场上装修公司众多&#xff0c;让人眼花缭乱&#…

作者头像 李华
网站建设 2026/7/7 4:40:50

python-LangGraph框架(3-31-LangGraph 「合并式状态管理」的原理与实践)

合并式状态&#xff08;Annotated 自定义合并函数&#xff09; 完美解决了这一核心问题。本文将聚焦 LangGraph 模式 3&#xff1a;并行结果安全合并&#xff0c;深度拆解合并式状态的设计理念、核心机制与落地实现&#xff0c;带你掌握多并行任务的安全状态管理方案。一、场景…

作者头像 李华
网站建设 2026/7/7 4:38:31

有什么针对新闻媒体行业的安全解决方案

我们可以先来了解下新闻媒体行业面临的安全威胁&#xff1a; 一、内容安全威胁 新闻媒体网站如果出现反动、暴力、色情等内容或发布的内容不当引发严重负面舆情的将视为严重安全问题。有数据统计&#xff0c;2019净网行动中共计有3.7万余家网站及APP因内容问题被约谈。 二、…

作者头像 李华