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

使用docker-compose up重启带entrypoint容器非无状态报错问题

问题成因

docker-compose up 默认运行逻辑为:若本地存在对应停止状态的服务容器,会直接重启旧容器,而非创建全新容器。Docker容器的可写层会在容器生命周期内(从创建到删除)持久化保留所有写入操作,你首次运行时entrypoint.sh在容器可写层创建了folder目录,第二次重启旧容器时,目录已经存在,触发mkdir命令的报错,且你配置了set -e,脚本遇到错误直接终止退出。
而执行docker-compose down时会删除停止状态的旧容器,再次执行docker-compose up就会创建全新的空可写层容器,因此运行正常。

解决方案

你可以根据自己的使用场景选择以下任意一种方案:

  • 修改entrypoint.sh中的目录创建逻辑,使用mkdir -p folder替代原命令,-p参数会在目录已存在时直接返回成功,不会触发报错,是最简便的适配方案。
  • 执行docker-compose up时添加--force-recreate参数,强制每次都重新创建全新容器,丢弃旧容器的可写层数据,命令为:docker-compose up --force-recreate
  • 执行docker-compose up时添加--rm参数,容器运行停止后自动删除,避免残留旧容器,命令为:docker-compose up --rm
  • 若folder为临时使用的目录,可以在docker-compose.yaml的service配置中添加tmpfs挂载,将目录放到内存中,容器停止后数据自动清空,配置示例:
services:
  test:
    # 其他原有配置保留
    tmpfs:
      - /folder

内容的提问来源于stack exchange,提问作者raphaelauv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:00:02