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

Docker Compose使用image时Bind Mount失败,容器反复重启如何解决?

解决Docker Compose使用image配置时Bind Mount导致容器持续重启的问题

问题原因

官方node:latest镜像的默认行为是:

  • 默认工作目录为/app
  • 默认启动命令为node(进入交互模式,无TTY时会立即退出)

直接使用image: node:latest并挂载到/usr/src/app/时,容器启动后工作目录还是默认的/app,执行node命令后因无交互输入立刻退出,加上restart: unless-stopped策略,就会导致容器持续重启。即使添加working_dir指定到/usr/src/app,但默认命令仍为node,未指定要运行的脚本,依然会退出。

而你的build配置能正常运行,核心是Dockerfile中设置了WORKDIR /usr/src/app,且挂载目录中存在启动脚本(如server.js)或含start脚本的package.json,同时你大概率在实际使用中指定了启动命令(只是配置里未体现)。

解决方案

要让image配置下的Bind Mount正常工作,需明确指定容器启动时的运行命令,确保容器能持续运行:

  1. 修正挂载路径(可选但建议)
    去掉挂载路径末尾的斜杠,保持和build配置一致:

    volumes:
      - ./volumes/nodejs:/usr/src/app
    
  2. 添加working_dir和启动命令
    根据项目情况选择对应命令:

    • 若挂载目录有server.js:
      nodejs:
        image: node:latest
        container_name: nodejs
        restart: unless-stopped
        ports:
          - "8080:8080"
        working_dir: /usr/src/app
        volumes:
          - ./volumes/nodejs:/usr/src/app
        command: node server.js
      
    • 若挂载目录有含start脚本的package.json:
      nodejs:
        image: node:latest
        container_name: nodejs
        restart: unless-stopped
        ports:
          - "8080:8080"
        working_dir: /usr/src/app
        volumes:
          - ./volumes/nodejs:/usr/src/app
        command: npm start
      
  3. 验证挂载目录内容
    确保./volumes/nodejs目录下存在对应的启动文件(server.js或package.json),否则容器仍会因找不到文件而重启。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:07:03