Linux如何使用Docker部署应用_Linux Docker部署应用要点

酷浩吖_8039

酷浩吖_8039

2026-04-05

424人浏览

原创

docker部署应用失败的核心原因有三:镜像构建不可复现、端口映射不匹配应用监听地址、容器内进程未以pid 1前台持续运行;任一出错将导致容器秒退或无法看到。

linux如何使用docker部署应用_linux docker部署应用要点

直接上结论:Docker部署应用不是“装完就跑”,核心卡点在镜像构建是否可复现、端口映射是否匹配应用实际监听地址、以及容器内进程是否真正作为 PID 1 持续运行。三者任一出错,docker run 后 docker ps 看不到容器,或容器秒退。

docker build 构建失败的常见原因

构建中断往往不是语法错误,而是网络、权限或路径问题。

  • Dockerfile 中 COPY 或 ADD 的源路径必须相对于构建上下文(build context),不能写绝对路径如 /home/user/app;若执行 docker build -f ./Dockerfile .,则 . 是上下文根,所有 COPY 路径都从这里算起
  • 国内环境拉取基础镜像(如 ubuntu:22.04、python:3.11-slim)超时,需提前配置镜像加速器,修改 /etc/docker/daemon.json 加入 "registry-mirrors" 字段,改完必须 sudo systemctl restart docker
  • 执行 RUN apt-get install 或 pip install 时因缓存或网络失败退出,建议加 && apt-get clean -y && rm -rf /var/lib/apt/lists/* 清理,并用 --no-cache-dir 避免 pip 缓存干扰

docker run 启动后容器立即退出

这是最常被忽略的问题:容器生命周期由 CMD 或 ENTRYPOINT 指定的进程决定,该进程必须前台运行、不 daemon 化、且不能是 shell 脚本里最后一条无阻塞命令。

  • Web 应用(如 Flask、FastAPI)默认监听 127.0.0.1:8000,但容器内必须绑定 0.0.0.0:8000,否则外部无法访问,且部分框架(如某些 Gunicorn 配置)会因无法绑定而静默失败退出
  • 使用 python app.py 启动时,确认 app.py 内没有 sys.exit() 或未捕获的异常;加 || tail -f /dev/null 是临时调试手段,但非正解
  • 避免在 ENTRYPOINT 中用 sh -c "xxx" 包裹命令——这会让 shell 成为 PID 1,而真正服务进程变成子进程,一旦子进程退出,shell 不自动退出,导致 docker ps 显示运行中但实际服务已挂

端口不通的典型排查路径

宿主机能 ping 通容器 IP,但 curl localhost:8000 失败,问题大概率不在网络驱动,而在映射逻辑或应用自身。

  • 检查 docker run -p 参数格式:必须是 -p HOST_PORT:CONTAINER_PORT,顺序反了(如写成 -p 8000:80 但容器监听的是 8000)会导致映射失效
  • 确认容器内应用真实监听端口:进入容器执行 netstat -tuln | grep :8000 或 ss -tuln | grep :8000,而不是只信文档或启动日志
  • 防火墙干扰:CentOS/RHEL 默认启用 firewalld,即使 docker run -p 成功,宿主机防火墙也可能拦截 HOST_PORT;临时关闭验证:sudo systemctl stop firewalld
  • Docker 默认使用 bridge 网络,容器 IP 对宿主机不可直接路由;必须通过 -p 映射或 --network host(不推荐用于生产)才能从宿主机访问

真正麻烦的从来不是命令敲不对,而是容器进程退出后没日志、端口监听了却连不上、镜像构建成功但换台机器就失败——这些都需要你习惯性查 docker logs -f <container_id></container_id>、进容器用 ps aux 看进程树、用 docker inspect 看网络和挂载细节。别依赖“应该可以”。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
flask框架如何搭建
flask框架如何搭建

搭建步骤:1、安装Python和Pip;2、创建虚拟环境;3、安装Flask;4、创建Flask应用;5、运行应用;6、访问应用。想了解更多flask框架的相关内容,可以阅读本专题下面的文章。

2024.06.27

3375

8

Python Flask框架
Python Flask框架

本专题专注于 Python 轻量级 Web 框架 Flask 的学习与实战,内容涵盖路由与视图、模板渲染、表单处理、数据库集成、用户认证以及RESTful API 开发。通过博客系统、任务管理工具与微服务接口等项目实战,帮助学员掌握 Flask 在快速构建小型到中型 Web 应用中的核心技能。

2025.08.25

5144

10

Python Flask Web框架与API开发
Python Flask Web框架与API开发

本专题系统介绍 Python Flask Web框架的基础与进阶应用,包括Flask路由、请求与响应、模板渲染、表单处理、安全性加固、数据库集成(SQLAlchemy)、以及使用Flask构建 RESTful API 服务。通过多个实战项目,帮助学习者掌握使用 Flask 开发高效、可扩展的 Web 应用与 API。

2025.12.15

296

16

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

2055

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

3042

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

1036

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

3439

7

Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

2025.12.22

119

5

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

2026.02.06

534

18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习