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

2024-09-28 19:00:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我的entrypoint.sh如下所示:

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

setenv.sh只是:

^{pr2}$

我的完整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操作时,我可以验证应用程序是否正在运行(bot会适当地响应我的请求)。但是,jbot.py中的所有print()语句都不在输出中——因此我有两个主要问题:

  1. 为什么我的entrypoint.sh只是挂起容器不返回?我做了docker run bot,而且我从未返回终端的控制权。然而,这个机器人似乎启动良好。

  2. 当我打开第二个终端并执行docker logs <container>时,为什么我没有从jbot.py获取任何打印语句?

fwiw,my jbot.py是一个while True:循环,监视输入。在


Tags: dockerrunpyenv脚本终端botsh
2条回答

对于第一个问题,您应该查看docker run的文档。很快,你将与集装箱相连,这样你就永远不会回到你的码头。为了分离,您需要添加选项-d。在

启动容器的常用命令是docker run -idt <container>。在

对于您的第二个问题,信息不足以确定问题所在,对不起。也许你可以在正确启动容器后再试一次。在

  1. 您没有运行docker容器as a daemon。在
^{bq}$
  1. 根据我的经验,在python中没有禁用输入缓冲的情况下,打印消息无法写入日志。在

python -u jbot.py

相关问题 更多 >