我有一个用于导出 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
内的陈述输出中没有 - 所以我有两个主要问题:
为什么我的
entrypoint.sh
只是挂容器不返回?我做docker run bot
,而且我再也没有返回对终端的控制权。但是,该机器人似乎可以正常启动。为什么我没有从
jbot.py
得到任何打印报表?当我打开第二个终端并执行docker logs <container>
时?
首先,我的jbot.py
是 while True:
循环,监控输入。
最佳答案
- 您没有运行 docker 容器 as a daemon .
docker run -d bot
- 根据我的经验,如果没有在 python 中禁用输入缓冲,打印消息不会进入日志。
python -u jbot.py
关于python - 为什么我的 Docker 容器在启动后没有将控制权返回给终端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46721993/