为什么我的Docker容器在启动后没有将控制权交还给终端?
问题描述:
我有一个用于导出Env变量的shell脚本。该脚本调用python脚本以从运行我的主python脚本之前需要存储的Web服务获取特定值。为什么我的Docker容器在启动后没有将控制权交还给终端?
我试过使用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
,我可以验证应用程序正在运行(机器人响应我的请求相应)。然而,所有内jbot.py
的print()
语句是从输出缺席 - 所以我有两个主要问题:
为什么我
entrypoint.sh
刚刚返回将集装箱?我做docker run bot
,我永远不会返回终端的控制权。然而,机器人似乎启动罚款。当我打开第二个终端并执行
docker logs <container>
时,为什么我没有从jbot.py
获得我的任何打印语句?
FWIW,我jbot.py
是while True:
循环,监视输入。
答
关于第一个问题,你应该检查的docker run
文档。不久之后,您将附上容器,以便您永远不会返回到您的终端。为了分离,您需要添加选项-d
。
启动容器的常用命令是docker run -idt <container>
。
对于第二个问题,信息不足以识别问题,抱歉。也许你可以在正确启动容器后再试一次。