我
总是
删除旧容器并运行新容器。这对每个应用程序和运行时都是一致的,不涉及如何手动将容器文件系统重置为初始状态。我几乎从不使用
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
在那里排队。)