当前位置: 首页 > 知识库问答 >
问题:

为什么我的Docker容器在启动后没有将控制权返回到终端?

帅雅逸
2023-03-14

我有一个用于导出环境变量的shell脚本。该脚本调用python脚本,以从web服务获取某些值,在运行主python脚本之前需要存储这些值。

我试过使用运行/bot/env/setenv.sh,但这似乎并不能使env变量在最终容器中可用。我曾尝试将内容放入一个entrypoint.sh文件中,该文件以调用pythonjbot.py结束,但容器从未完成其设置(我假设,因为entrypoint中的脚本是一个连续循环?)

我的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时,我可以验证应用程序是否正在运行(bot会适当地响应我的请求)。但是,jbot.py中的所有print()语句都不在输出中,因此我有两个主要问题:

>

  • 为什么我的entrypoint.sh只是挂起容器返回?我做docker运行bot,并且我永远不会返回对终端的控制。然而,机器人似乎启动良好。

    当我打开第二个终端并执行docker日志时,为什么不从jbot.py获取任何打印语句

    fwiw,myjbot.py是一个而True:循环,监视输入。


  • 共有2个答案

    贝洲
    2023-03-14

    对于第一个问题,您应该查看docker run的文档。很快,您将连接集装箱,因此您将永远不会返回航站楼。要分离,需要添加选项-d

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

    对于第二个问题,信息不足以确定问题,抱歉。也许您可以在正确启动容器后重试。

    经正祥
    2023-03-14
    1. 您没有将docker容器作为守护进程运行

    docker run-d机器人

    python-ujbot.py

     类似资料:
    • 返回文件的URL。 starfxdemodoc.fxml为: 而StarfXDemodocController.java是这样的: 有谁能帮我一下吗? 编辑/更新: 根据james_d的评论(谢谢你James,显然我已经盯着这个问题太久了……),我修复了控制器中的明显错误,并将SimNameField设置为TextField,而不是Label(并更新了上面的代码块以反映这一点)。我还将异常处理更改

    • 我已经建立了一个asp.netmvc网页。我的所有操作,如:创建、编辑等...有自己的视图,除了删除,因为我正试图在Bootstrap的帮助下弹出一个模态。我通过jQuery/JavaScript向modal传递一个id,并将asp-action作为表单的属性,理论上它应该可以工作,但事实并非如此。 索引视图: 删除控制器中的操作: Javascript: 输入获取id作为名称的值: 调试时,它不

    • 我正在创建一个进行线性探测以查找键索引的哈希图。如果键已经在索引中,我想增加它的值,而不是向新索引添加一个。 例如,如果我得到字符串“五,五,五”的字数,我的输出是五1,五1,五1,而不是五3。 我认为一定是我的 containsKey 方法,它使用 get 方法来检查我的密钥是否已在映射中。下面是我的Hashmap.java类。

    • 我有自己的目录结构: 在我的Dockerfile中,我将复制到目录,但不幸的是,它没有被复制: 错误:

    • null 虽然我不能让cron在那个特定的容器中工作,但我能够为cron创建一个独立的docker容器,并成功地使它自动运行。 至于cron容器的设置,我遵循了链接的文章,使用Docker-Julien Boulay运行了一个cron作业,并且能够使其工作。

    • 问题内容: 我知道您可以使用将文件从主机复制到正在运行的Docker容器,但就我而言,我想在启动Docker容器之前将其复制。我怎样才能做到这一点? 请注意,我不想在构建的docker映像中使用此文件,因此即使在构建时也无法复制该文件。另一种方法是使用已安装的卷(带有),但我也不希望这样。 问题答案: 您可以执行以下操作: