【问题标题】:Docker: Container permanently restartingDocker:容器永久重启
【发布时间】:2021-05-26 12:46:12
【问题描述】:

我是整个 Docker Container 主题的新手,目前正尝试通过 bash 脚本在 shell 中运行多个 python 脚本(因为就同时运行多个 python 脚本而言,这似乎是最简单的事情)。在此之前,我通过以下 Dockerfile 构建我的图像

FROM debian:buster-slim

ENV PACKAGES1="build-essential git python3"

RUN apt-get update && \
    apt-get install -y $PACKAGES1 
    
COPY /mnt /mnt

CMD [ "/bin/bash", "/mnt/setup_bash.sh" ]

执行setup_bash.sh

#! /bin/bash

python3 script1.py & 
python3 script2.py &

在运行生成的容器后,他会不断重新启动并且不会保持活动状态。同时docker logs 命令没有显示任何错误,所以我有点不知道是什么问题。

【问题讨论】:

  • 当主进程完成时,容器终止。由于您正在生成进程,并且它们都没有作为主进程运行,因此容器终止。
  • 没有看到它“不断重启”的部分,但看起来它可能不是“等待”子进程完成
  • 你能否重组它以在两个单独的容器中每个容器启动一个脚本,而无需启动器 shell 脚本?即使它需要两个单独的容器(可能还有两个单独的图像),但具有较小的单一用途容器最终会更容易运行和调试。
  • 如果您根本不希望容器退出,假设 python 脚本正在启动某种有用的服务,您可以在启动脚本中放置一个无限循环以确保脚本永远不会终止。 (可能不是理想的方式,但可以工作)

标签: python bash docker containers


【解决方案1】:

系统主进程退出,所以docker被杀死。您正在后台运行两个进程,并且主 bash 脚本退出。你可以:

  • 在前台运行一个脚本,或者
  • 运行sleep infinity 以保持主脚本运行
  • 全部重构,对于复杂的设置考虑使用服务管理,例如supervisord

与选项 2 一样:

#! /bin/bash
python3 script1.py & 
python3 script2.py &
sleep infinity  # don't quit

【讨论】:

  • 或者你可以只添加一个wait 命令而不是sleep infinity
【解决方案2】:

正如我在 cmets 中所说,如果您的脚本在进程完成之前退出,您可以使用 wait 命令等待所有脚本完成后再继续。

#! /bin/bash

python3 script1.py & 
python3 script2.py &

wait

echo "Finished!"

【讨论】:

    猜你喜欢
    • 2019-08-11
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    相关资源
    最近更新 更多