如果是Docker 容器,不要在 Dockerfile 里面做开机自启,Docker 的标准做法是使用--restart策略。
推荐方案(★★★★★)
Dockerfile
建议把CMD改成下面这样,不要使用nohup。
FROM python:3.10-slim WORKDIR /opt/jyd01/wangruihua/jyd_tts COPY requirements.txt . RUN pip install --no-cache-dir \ -i https://pypi.tuna.tsinghua.edu.cn/simple \ -r requirements.txt COPY . . RUN mkdir -p logs EXPOSE 8010 CMD ["bash", "-c", "python tts_flask.py 2>&1 | tee logs/8010.log"]原因:
- Python 是主进程(PID1)
- Python 崩溃,Docker 能检测到
docker logs可以查看日志- 日志同时保存到
logs/8010.log
构建镜像
docker build -t jyd_tts:v1.0 .导出镜像(用于部署)
docker save -o jyd_tts_v1.0.tar jyd_tts:v1.0新服务器导入:
docker load -i jyd_tts_v1.0.tar启动容器(设置自动启动)
docker run -d \ --name jyd_tts_container \ -p 8010:8010 \ --restart always \ jyd_tts:v1.0如果需要挂载宿主机目录:
docker run -d \ --name jyd_tts_container \ -p 8010:8010 \ --restart always \ -v /opt/jyd01/wangruihua/api_docker/jyd_tts:/opt/jyd01/wangruihua/jyd_tts \ jyd_tts:v1.0其中:
--restart always表示:
- 服务器重启后自动启动
- Docker 服务重启后自动启动
- 容器异常退出自动重启
如果容器已经存在
直接修改重启策略即可:
docker update --restart=always jyd_tts_container查看是否生效:
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' jyd_tts应该输出:
always取消重启测策略:
# 先停掉自动重启,避免一直刷 docker update --restart=no jyd_tts_container # 停止容器 docker stop jyd_tts_container # 查看退出原因和日志 docker logs --tail=200 jyd_tts_container查看容器状态
docker ps应该看到
STATUS Up 3 minutes查看日志
实时查看
docker logs -f jyd_tts_container或者
cat logs/8010.log如果你的服务器没有开启 Docker 自启动
还需要执行一次:
sudo systemctl enable docker sudo systemctl start docker验证:
systemctl status docker只要 Docker 服务开机启动,并且容器设置了--restart always,那么服务器重启后,tts_flask.py会自动启动,无需额外写systemd服务。这是 Docker 官方推荐的部署方式。