在容器中运行Docker脚本应用程序

我是新来的Docker和容器 – 我有一个Python 3脚本,基于命令行参数从网站中提取数据并打印结果。 如果没有可用的networking连接,它使用Redis来caching数据。 Dockerfile我看起来像这样

FROM ubuntu:latest RUN apt-get update -y && apt-get -y install redis-server && apt-get install -y python3-pip python3.5-dev build-essential COPY . /app WORKDIR /app RUN pip3 install -r requirements.txt ENTRYPOINT ["python3"] CMD ["pn.py"] 

我能够构build图像,但是当我启动容器时,它大概会运行Python命令来在容器中运行脚本并退出,并且作为结果,我看不到主机的结果。

该脚本需要命令行input,否则将失败。 如何将这些指定为可用于从主机运行脚本的单个Docker运行命令的一部分?

或者,我怎样才能启动容器,而无需调用脚本,而是在运行容器内手动运行脚本?

这取决于你想对结果做什么。

假设如下:

  • ENTRYPOINT行会告诉图像启动容器时应执行的操作。 这将是PID 1
  • 当该行存在时, CMD内容被用作ENTRYPOINT
  • 泊坞窗容器总是退出时,他们的主要任务(PID 1)退出。

基本上你的docker正在做它被告知要做的事情。 如果你希望它继续运行,你应该给一个不会以ENTRYPOINT或者CMD ENTRYPOINT的任务(如果ENTRYPOINT不存在)。

要在shell模式下手动启动容器并查看发生了什么,可以按如下方式运行它:

 docker run -ti [OPTIONS] [CONTAINER_NAME] bash 

然后你将在shell中“进入”容器,所以你可以手动运行脚本:

 #~ python3 pn.py