【问题标题】:Python docker container shuts down immediately after finishing running the app, even if specified to stay in -d -tPython docker 容器在完成运行应用程序后立即关闭,即使指定留在 -d -t
【发布时间】:2021-11-15 12:59:33
【问题描述】:

我有一个 dockerfile

FROM python:3

WORKDIR /app

ADD ./venv ./venv

ADD ./data/file1.csv.gz ./data/file1.csv.gz

ADD ./data/file2.csv.gz ./data/file2.csv.gz

ADD ./requirements.txt ./venv/requirements.txt

WORKDIR /app/venv

RUN pip install --no-cache-dir -r requirements.txt

CMD ["python", "./src/script.py", "/app/data/file1.csv.gz", "/app/data/file2.csv.gz"]

从它构建映像并运行它后,该映像会按应有的方式运行应用程序,但容器在完成后会立即关闭。这肯定是有问题的,因为我不能指望输出文件。

我曾尝试使用 docker run -d -t <imgname>docker ps 显示应用程序几秒钟,但又一次,一旦完成该过程,容器就会自行关闭。

因此无法访问,即使使用docker exec <imgid> -it --entrypoint /bin/bash,它也会立即退出。

我也尝试在最后一个 CMD 之后添加最后一个 RUN /bin/bash,但它也无济于事。

我能做些什么才能真正登录到容器并检查文件?

【问题讨论】:

  • 一个容器在前台进程退出时退出:事情就是这样。如果你想让一个容器继续运行,你需要安排一个命令保持运行。您可以在 Python 脚本的末尾添加一个循环,或者使用sleep inf 或其他内容跟进它,但这需要成为您的CMD 的一部分。 RUN 语句在运行时不执行任何操作(它们仅在 build 时生效)。
  • 脚本是否终止或像服务一样运行?如果您需要一个输出文件,最好挂载一个目录。

标签: python docker docker-container docker-run docker-exec


【解决方案1】:

只要容器没有被移除,您就可以获取数据。您可以使用docker ps -a 找到容器的名称。

然后,如果您知道文件的位置,则可以使用将其复制到您的主机

docker cp <container name>:<file> .

或者,您可以将容器的内容提交到新映像并在其中运行 shell

docker commit <container name> newimagename
docker run --rm -it newimagename /bin/bash

然后您可以在容器中四处查看并找到您的文件。

不幸的是,没有办法再次启动容器并在其中环顾四周。 docker start 将启动容器,但会再次运行与 docker run 相同的命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多