为什么我的Docker容器启动后不能将控制权交还给terminal?

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

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

我的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 ,我可以validation应用程序正在运行(机器人响应我的请求相应)。 但是,输出中缺lessjbot.py中的所有print()语句 – 所以我有两个主要问题:

  1. 为什么我的entrypoint.sh只是挂回来的容器? 我做docker run bot ,我永远不会返回terminal的控制权。 然而,机器人似乎启动罚款。

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

fwiw,我的jbot.py是一个while True:循环,监视input。

  1. 您没有将Docker容器作为守护进程运行 。

docker运行-d机器人

  1. 根据我的经验,打印消息不会在python中禁用input缓冲的情况下生成日志。

python -u jbot.py

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

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

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