Python 在容器中运行Docker脚本应用程序
我是Docker和containers的新手——我有一个Python 3脚本,它根据命令行参数从网站提取数据并打印结果。如果没有可用的网络连接,它将使用Redis缓存数据。我的Dockerfile是这样的Python 在容器中运行Docker脚本应用程序,python,docker,redis,Python,Docker,Redis,我是Docker和containers的新手——我有一个Python 3脚本,它根据命令行参数从网站提取数据并打印结果。如果没有可用的网络连接,它将使用Redis缓存数据。我的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-e
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"]
我能够构建映像,但是当我启动容器时,它可能会运行Python命令在容器内运行脚本并退出,因此我无法看到来自主机的结果
脚本需要命令行输入,否则将失败。如何将它们指定为我可以用于从主机运行脚本的单个Docker run命令的一部分
或者,如何在不调用脚本的情况下启动容器,而是在正在运行的容器中手动运行脚本?这取决于您希望对结果执行什么操作 假设如下:
行告诉图像启动容器时应该执行什么。这将是ENTRYPOINT
PID 1
- 当该行存在时,
内容用作CMD
入口点的参数
- docker容器总是在其主任务(PID 1)退出时退出
ENTRYPOINT
或CMD
退出的任务(如果ENTRYPOINT
不存在)
要在shell
模式下手动启动容器并查看发生了什么,可以按以下方式运行:
docker run -ti [OPTIONS] [CONTAINER_NAME] bash
然后,您将在一个shell中“插入”容器,因此您可以手动运行脚本:
#~ python3 pn.py
好的,谢谢。
Dockerfile
第二行中的命令apt get-y install redis server
应该安装redis server
并自动启动,但这不起作用。进入容器后,服务redis服务器状态
告诉我它没有运行。即使在我更改了Dockerfile
以添加额外的行service redis server restart
之后,也会发生这种情况。我如何解决这个问题?您误解了Dockerfile
的概念。您无法获得从一条线路到另一条线路的服务。Dockerfile
创建一个由一个或多个层组成的docker图像
。Dockerfile
的每一行都会创建一个新层。将其视为类的静态成员,生成的图像就是一个类。使用此图像运行的容器是此类的实例或对象。在使用Dockerfile构建映像时,不能期望服务继续运行。此外,我会将行RUN-apt-get-update-y&&apt-get-y安装redis服务器&&apt-get-install-y python3.5-dev-build-essential
更改为RUN-apt-get-update&&apt-get-y安装redis服务器python3.5-dev-build-essential
,以简化。