python-2.7 - 初始代码执行后,Docker 容器在代码 0 上退出

标签 python-2.7 docker docker-compose dockerfile

我在创建 Docker 容器时遇到了一些困难。我修改了一些代码,将 EMC Isilon 的指标导入到 InfluxDB 数据库中,以便在 Grafana 中使用。我设法让代码在容器中运行,但在初始执行后,容器立即以代码 0 退出。我正在动态学习 Docker,所以很有可能我遗漏了一些明显的东西(请温柔,绝对接受建议,但如果事情非常明显,请不要撕裂我)。我知道链接是禁忌,但我将链接到原始文章和使用的 git repo(让我知道是否有更好的方法来处理它)。

文章:
https://community.emc.com/blogs/keith/2017/01/26/isilon-data-insights-connector--do-it-yourself-isilon-monitoring

Git repo :
https://github.com/Isilon/isilon_data_insights_connector

我已经尝试在我配置的 docker-compose 服务上设置 stdin_open 和 tty 。不幸的是,这是我在网上找到的唯一可能使容器在执行后保持运行的东西。

[ docker 撰写]

  isilonscan:
    stdin_open: true
    tty: true
    build:
      args:
        - http_proxy=http://*****:3128
      context: ./Isilonscan/isilonscan-context
      dockerfile: Dockerfile
    volumes:
      - ./Isilonscan/isilonscan-data:/opt/isilon_data_insights_connector
      - ./Isilonscan/isi_data_insights_d.cfg:/opt/isilon_data_insights_connector/isi_data_insights_d.cfg
    depends_on:
      - influxdb
    command: ["python", "/opt/isilon_data_insights_connector/isi_data_insights_d.py", "start", "--config=/opt/isilon_data_insights_connector/isi_data_insights_d.cfg"]

[Dockerfile]
FROM python:2
WORKDIR /usr/src/app
COPY isilon-exporter /opt/isilon_data_insights_connector
RUN apt-get install git && \
cd /opt && \
git clone https://github.com/Isilon/isilon_data_insights_connector.git && \
cd ./isilon_data_insights_connector && \
#pip install --upgrade pip && \
#pip install --upgrade setuptools && \
pip install -r requirements.txt && \
apt-get remove git -y && \
apt-get clean all -y
ENTRYPOINT ["python", "/opt/isilon_data_insights_connector/isi_data_insights_d.py", "start", "--config=/opt/isilon_data_insights_connector/isi_data_insights_d.cfg"] 

预期的:
代码应该在新行上运行并结束。每 30 秒(或配置的时间间隔),容器应轮询 Isilon 以获取指标并将它们保存在 InfluxDB(不同的容器)中。

实际的:
在启动 docker-compose up 时,它会写入正确执行每个步骤的输出,然后到达末尾并以代码 0 退出。检查 docker ps 表明它实际上不再运行。

最佳答案

导致 docker container 的原因有很多可以退出。例如被 OOM 杀死杀手等

由于您的container将退出报告为正常退出(返回代码 0 )。运行您的脚本的进程很可能是 isi_data_insights_d.py已经停止,因为它已经执行了所有必需的代码。

由于您的.py 中没有任何东西可以运行。脚本,进程退出导致容器也退出。

保持容器事件的诀窍是保持主进程繁忙。也就是说,脚本/程序不能退出。

你可以做的是用 loop 包装整个代码。然后要求进程转到sleep一段时间后醒来再次执行相同的代码。

或者,您可以使用进程监控程序,如 supervisord或者您可以编写另一个 python 脚本来协调脚本之间的执行。至于后者subprocess lib 可能是一个很好的帮助。

关于python-2.7 - 初始代码执行后,Docker 容器在代码 0 上退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54359036/

相关文章:

python - 使用 facebook sdk 和 flask 从用户那里获取帖子

docker - 如何创建使用为 jenkins 用户提供的 ssh key 的 Jenkins Docker 镜像?

linux - Dockerfile 不会以具有 sudo 权限的用户身份运行脚本

docker - Docker撰写一个接一个地运行多个命令

node.js - docker容器构建期间Npm安装错误

python - 如何在 Python 中获取导入器文件名?

python - 在 python 中抛出 pdb 警告时如何查看函数内的变量?

Python 正则表达式 - 匹配和 Start()

linux - 是否可以在 Kubernetes Pod 中挂载主目录 (~)?

node.js - nodejs dockerized应用无法连接到mariadb dockerized数据库