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

rzl*_*vmp 3 docker

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

当我重新启动服务器而不停止该容器时,我无法再次启动它。

错误信息是:

pidfile found, try stopping another running service or delete /var/run/service.pid
Run Code Online (Sandbox Code Playgroud)

我知道我可以

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

但我只想做类似的事情

docker rm_file container:/var/run/service.pid; docker start container
Run Code Online (Sandbox Code Playgroud)

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

难道这里没有办法在不完全重建容器的情况下访问容器的文件系统吗?这个操作看起来很有用...

rzl*_*vmp 7

我自己使用另一个答案的提示来回答

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

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

    sudo rm -f ${LOCAL_DIR}/run/service.pid
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行容器:

    docker start container_name
    
    Run Code Online (Sandbox Code Playgroud)

或者合二为一:

sudo rm -f "$(docker inspect -f '{{ .GraphDriver.Data.UpperDir }}' container_name)/run/service.pid" && docker start container_name
Run Code Online (Sandbox Code Playgroud)