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

Docker Compose挂载目录后找不到run.dev.sh的解决求助

解决WSL2+Docker挂载本地目录导致找不到run.dev.sh的问题

核心原因

使用./:/app卷映射时,WSL2本地目录会完全覆盖容器内/app目录的原有内容,包括Docker构建过程中复制进去的run.dev.sh脚本,导致容器启动时找不到该文件。

可行解决方案

方案1:挂载具体源码目录,避免覆盖容器内关键文件

不要直接挂载根目录到/app,只挂载需要热重载的源码目录(如app/、public/等),保留容器内的node_modules和脚本文件:

# docker-compose.yml 配置示例
services:
  remix-app:
    build: .
    volumes:
      - ./app:/app/app
      - ./public:/app/public
      - ./remix.config.js:/app/remix.config.js
      # 根据项目需求添加其他需要热重载的文件/目录
    command: sh run.dev.sh

方案2:将脚本放到独立目录,避免被挂载覆盖

修改Dockerfile,把run.dev.sh复制到容器内非挂载目录(如/scripts),确保挂载时不会被覆盖:

# Dockerfile 配置示例
FROM node:20-alpine

WORKDIR /app

# 先复制脚本到独立目录并赋予执行权限
COPY run.dev.sh /scripts/run.dev.sh
RUN chmod +x /scripts/run.dev.sh

# 复制依赖文件并安装
COPY package*.json ./
RUN npm install

# 复制项目源码
COPY . .

# 启动命令指向脚本的新路径
CMD ["sh", "/scripts/run.dev.sh"]

之后docker-compose.yml可正常使用./:/app挂载,脚本不会被覆盖。

方案3:使用WSL2原生路径执行命令

确保在WSL2终端内运行docker-compose命令,而非Windows的CMD/PowerShell。使用WSL2内的项目绝对路径挂载:

volumes:
  - /home/你的用户名/你的项目目录:/app

同时确保WSL2内的run.dev.sh有执行权限:

chmod +x run.dev.sh

方案4:直接执行命令替代脚本

如果run.dev.sh内容简单,可直接在docker-compose的command中写命令,跳过脚本文件:

command: npm run dev

需确保package.json中存在dev脚本,对应Remix的开发启动命令。

验证步骤

  1. 执行docker-compose build重新构建镜像
  2. 执行docker-compose up启动容器
  3. 修改本地源码,确认热重载功能正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:42:44