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正常工作,需明确指定容器启动时的运行命令,确保容器能持续运行:
修正挂载路径(可选但建议)
去掉挂载路径末尾的斜杠,保持和build配置一致:volumes: - ./volumes/nodejs:/usr/src/app添加
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
- 若挂载目录有
验证挂载目录内容
确保./volumes/nodejs目录下存在对应的启动文件(server.js或package.json),否则容器仍会因找不到文件而重启。
内容的提问来源于stack exchange,提问作者Ronnie Smith
相关产品推荐
相关产品推荐

