我有一个用于导出Env变量的shell脚本。这个脚本调用python脚本从运行我的主python脚本之前需要存储的Web服务中获取某些值。
我尝试过使用RUN . /bot/env/setenv.sh
,但这似乎并没有使最终容器中的env变量可用。我已经尝试将内容放在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>
获取任何打印语句?
fwiw,我的jbot.py
是一个while True:
循环,监控输入。
答案 0 :(得分:3)
docker run -d bot
python -u jbot.py
答案 1 :(得分:1)
关于第一个问题,您应该查看docker run
的文档。很快,您附加容器,所以您永远不会返回您的终端。要分离,您需要添加选项-d
。
启动容器的常用命令是docker run -idt <container>
。
对于你的第二个问题,这些信息不足以确定问题,对不起。也许您可以在正确启动容器后再试一次。