You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postgres Docker容器停止后自动重启并生成新ID,如何禁用?

解决Postgres Docker容器停止后自动重启并生成新ID的问题

嘿,我一眼就看出问题所在了——你是用Docker Compose管理这个Postgres服务的对吧?所以单独执行docker update --restart=no <容器ID>根本起不了作用,因为Compose会一直监控它定义的服务状态,一旦发现容器停了,就会按照规则重新创建新容器,这就是为啥你每次停完都会看到新的容器ID。

下面是彻底解决这个问题的步骤:

1. 先清理当前的Compose服务容器

首先用Compose命令停止并移除现有的相关容器,避免旧配置干扰:

docker-compose down

这个命令会停止所有由当前docker-compose.yml定义的服务容器,还会清理默认创建的网络,确保我们从头开始配置。

2. 修改docker-compose.yml配置

找到db服务的配置块,添加restart: no参数,明确禁用自动重启策略。修改后的完整配置如下:

version: '3.1'
services:
  web:
    build: ./xxx
    ports:
      - "9001:80"
    volumes:
      - ./app/xxx:/var/www/html
    environment:
      XDEBUG_CONFIG: >
        remote_host=172.18.0.1
        idekey=xxx
      PHP_IDE_CONFIG: serverName=xxx
    links:
      - db
  db:
    image: postgres
    environment:
      POSTGRES_DB: xxx
      POSTGRES_USER: xxx
      POSTGRES_PASSWORD: xxx
    ports:
      - "5432:5432"
    restart: no  # 新增这一行,禁用自动重启

小贴士:如果之后你想让容器只在意外崩溃时重启(手动停止后不重启),可以把restart: no改成restart: on-failure,这样更贴合实际使用场景。

3. 重新用Compose启动服务

执行下面的命令重新部署服务:

docker-compose up -d

这次启动的Postgres容器就会严格遵循你设置的restart: no策略了。

验证效果

现在你再执行docker stop <新的容器ID>,然后用docker ps查看,就不会看到新的Postgres容器自动冒出来了~

补充说明:为什么之前的docker update没用?

简单来说,Compose是基于服务定义来管理容器的,它会定期校验容器状态是否和配置一致。你单独修改单个容器的重启策略,但compose文件里没改,Compose会认为这个容器不符合定义,于是销毁它并重建一个符合配置的新容器,所以才会出现新ID的情况。

内容的提问来源于stack exchange,提问作者Marcin Grudziński

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:03:47