第十篇:Docker 常见问题与进阶
【摘要】 学 Docker 的过程中,真正让人头疼的往往不是命令本身,而是各种奇怪的问题。这一篇把比较常见的坑集中整理一下。容器为什么启动后马上退出?首先:docker ps -a找到容器:docker logs <container>很多时候是因为主进程:启动↓执行失败/执行结束↓进程退出↓容器退出端口被占用了怎么办?例如:docker run -p 8080:80 nginx提示:port is ...
学 Docker 的过程中,真正让人头疼的往往不是命令本身,而是各种奇怪的问题。
这一篇把比较常见的坑集中整理一下。
容器为什么启动后马上退出?
首先:
docker ps -a
找到容器:
docker logs <container>
很多时候是因为主进程:
启动
↓
执行失败/执行结束
↓
进程退出
↓
容器退出
端口被占用了怎么办?
例如:
docker run -p 8080:80 nginx
提示:
port is already allocated
说明宿主机 8080 已经被其他程序使用。
可以换:
-p 8081:80
注意:
8081
是宿主机端口。
80
仍然是容器端口。
权限问题
Linux 上 Docker 经常遇到权限问题。
例如:
Permission denied
不要第一反应:
chmod -R 777
这种方式虽然有时候能“解决”,但也可能留下严重的安全问题。
应该先确认:
容器运行用户
UID
GID
宿主机目录权限
Volume 权限
Docker 把磁盘吃满了
先看:
docker system df
它可以帮助你判断:
镜像
容器
Volume
Build Cache
分别占用了多少空间。
确认无用资源之后,再考虑清理。
不要在不了解数据的情况下直接进行大范围删除。
尤其要注意 Volume。
Docker 和 Kubernetes 有什么关系?
这也是一个非常经典的问题。
可以粗略理解:
Docker
主要解决:
构建
分发
运行
Kubernetes
主要解决:
集群管理
调度
服务发现
扩缩容
故障恢复
所以 Kubernetes 并不是简单意义上的“更高级 Docker”。
它们解决的问题层级不同。
Docker 安全
生产环境至少要注意:
不要随便运行陌生镜像
镜像不是“天然安全”的。
不要把密钥写进镜像
例如:
ENV API_KEY=xxxxx
这种方式很容易把密钥带进镜像历史或其他可见信息中。
尽量不要使用 root
应用如果没有必要,不应该以 root 身份运行。
固定版本
不要什么都:
latest
固定版本更加方便审计和回滚。
少开放端口
例如 Redis、MySQL 等内部服务,通常不应该直接暴露到公网。
到这里,Docker 入门主线就结束了
如果把这 10 篇全部压缩成几句话:
Image
负责打包
Container
负责运行
Volume
负责数据
Network
负责通信
Dockerfile
负责构建镜像
Compose
负责组合多个服务
再往后,就可以继续往:
Docker
↓
CI/CD
↓
容器编排
↓
Kubernetes
↓
云原生
继续深入。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)