python - 为什么我的 Docker 容器在启动后没有将控制权返回给终端?

标签 python bash shell docker dockerfile

我有一个用于导出 Env 变量的 shell 脚本。此脚本调用 python 脚本以从我需要在运行我的主要 python 脚本之前存储的 Web 服务获取某些值。

我试过使用 RUN . /bot/env/setenv.sh ,但这似乎并没有使环境变量在最终容器中可用。我试过将内容放在 entrypoint.sh 中以调用 python jbot.py 结尾的文件,但容器从未完成其设置(我假设是因为入口点内的脚本是一个连续循环?)

我的 entrypoint.sh看起来像这样:

#!/bin/bash
. /jirabot/env/setenv.sh
python jbot.py

还有 setenv.sh只是:

#!/bin/bash
export SLACK_BOT_TOKEN="xoxb-token"
export BOT_ID=`python env/print_bot_id.py ${SLACK_BOT_TOKEN}`

我的完整 Dockerfile 是:

FROM python:2

COPY jirabot/ /jirabot/
RUN pip install slackclient schedule jira
WORKDIR /jirabot
#CMD [ "python", "jbot.py" ]
ENTRYPOINT [ "/jirabot/entrypoint.sh" ]

当我做 docker run bot ,我可以验证应用程序正在运行(机器人适本地响应我的请求)。但是,所有 print() jbot.py 内的陈述输出中没有 - 所以我有两个主要问题:

  1. 为什么我的 entrypoint.sh只是挂容器不返回?我做docker run bot ,而且我再也没有返回对终端的控制权。但是,该机器人似乎可以正常启动。

  2. 为什么我没有从 jbot.py 得到任何打印报表?当我打开第二个终端并执行 docker logs <container> 时?

首先,我的jbot.pywhile True:循环,监控输入。

最佳答案

  1. 您没有运行 docker 容器 as a daemon .

docker run -d bot

  1. 根据我的经验,如果没有在 python 中禁用输入缓冲,打印消息不会进入日志。

python -u jbot.py

关于python - 为什么我的 Docker 容器在启动后没有将控制权返回给终端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46721993/

相关文章:

linux - Bash Shell 传递可变数量的参数

shell - 如何让两个 JAR 在 "docker run container"上自动启动

linux - 从 linux "date"命令中提取月份和日期

python - 使用 IN 运算符比较多列

python - 将数组映射到更高维度 - Python

linux - 有人可以解释 Shell Shock Bash 代码吗?

linux - 如何在特定时间复制具有特定后缀的文件?

Bash:Nginx 版本检查切

python - 尝试获取 .csv 文件的一列中的最大数字

python - 如何使用 pyglet 在 Mayavi 动画中播放声音?