Python docker 容器在完成 运行 应用程序后立即关闭,即使指定留在 -d -t
Python docker container shuts down immediately after finishing running the app, even if specified to stay in -d -t
我有一个 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
但它也没有帮助。
实际上我可以做什么才能登录到容器并检查文件?
只要容器没有被移除,您就可以获取数据。您可以使用 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
.
时
我有一个 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
但它也没有帮助。
实际上我可以做什么才能登录到容器并检查文件?
只要容器没有被移除,您就可以获取数据。您可以使用 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
.