为什么我的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.pyprint()语句是从输出缺席 - 所以我有两个主要问题:

  1. 为什么我entrypoint.sh刚刚返回将集装箱?我做docker run bot,我永远不会返回终端的控制权。然而,机器人似乎启动罚款。

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

FWIW,我jbot.pywhile True:循环,监视输入。

  1. 您未运行码头集装箱as a daemon

搬运工运行-d机器人

  1. 在我的经验,打印消息不使其向日志而不输入缓冲在python禁用。
  2. 蟒蛇-u jbot.py

开始=>

关于第一个问题,你应该检查的docker run文档。不久之后,您将附上容器,以便您永远不会返回到您的终端。为了分离,您需要添加选项-d

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

对于第二个问题,信息不足以识别问题,抱歉。也许你可以在正确启动容器后再试一次。