社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

从停止的docker容器中删除文件(不创建新图像)

rzlvmp • 3 年前 • 1502 次点击  

我有一些简单的服务容器。

当我在不停止这个容器的情况下重新启动服务器时,我无法再次启动它。

错误消息是:

pidfile found, try stopping another running service or delete /var/run/service.pid

我知道我可以

  1. 从映像运行新容器并删除已停止的容器
  2. 从停止的容器创建新映像,并使用新入口点重新运行它。差不多 rm -f /var/run/service.pid && original_entrypoint.sh

但我只想做一些

docker rm_file container:/var/run/service.pid; docker start container

因为它是最简单、最快速的解决方案。

不完全重建容器的fs就无法访问它吗?这个手术看起来很有用。。。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132320
 
1502 次点击  
文章 [ 2 ]  |  最新文章 3 年前
rzlvmp
Reply   •   1 楼
rzlvmp    4 年前

用别人的提示自己回答 answer

  1. 查找docker主机上存储的目录:

    export LOCAL_DIR=$(docker inspect -f '{{ .GraphDriver.Data.UpperDir }}' container_name)
    
  2. 在本地删除文件:

    sudo rm -f ${LOCAL_DIR}/run/service.pid
    
  3. 运行容器:

    docker start container_name
    

或是一应俱全:

sudo rm -f "$(docker inspect -f '{{ .GraphDriver.Data.UpperDir }}' container_name)/run/service.pid" && docker start container_name
David Maze
Reply   •   2 楼
David Maze    4 年前

总是 删除旧容器并运行新容器。这对每个应用程序和运行时都是一致的,不涉及如何手动将容器文件系统重置为初始状态。我几乎从不使用 docker start .

docker rm container_name
docker run -d --name container_name ...

如果您所在的环境中旧的pid文件可能会被留下(可能在绑定装载的主机目录中),则可以使用入口点包装脚本来清理它:

#!/bin/sh
rm -f /var/run/service.pid
exec "$@"

在Dockerfile中,将此脚本设置为 ENTRYPOINT .最后一行将运行图像的 CMD 作为主要的容器过程。

...
COPY entrypoint.sh . # must be executable, may already be there
ENTRYPOINT ["./entrypoint.sh"] # must be JSON-array form
CMD same as before

(你的问题提到 original_entrypoint.sh ; 如果已经进行了此设置,请在本地源代码树中编辑现有的入口点脚本,并添加 rm -f 在那里排队。)