You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker Compose卷挂载失败求助 附我的配置文件详情

搞定Docker Compose卷挂载失效的问题

嘿,我来帮你排查这个卷挂载没生效的问题!结合你给出的配置文件,咱们一步步来梳理可能的原因和解决办法:

1. 先检查权限匹配问题

容器里的/usr/src/app目录是基于node:carbon镜像创建的,默认所有者可能是root或者node用户。如果本地目录的权限和容器内不搭,挂载很容易出问题。

  • 先进容器看看目录权限:
    docker exec -it myapp ls -ld /usr/src/app
    
  • 如果权限不对,直接在你的development.dockerfile里加几行权限配置:
    FROM node:carbon
    LABEL Foo bar
    ENV CONTAINER_PATH /usr/src/app
    WORKDIR $CONTAINER_PATH
    # 先创建目录并把权限给到node用户
    RUN mkdir -p $CONTAINER_PATH && chown -R node:node $CONTAINER_PATH
    USER node # 切换到node用户运行容器,避免权限冲突
    EXPOSE 80 443 3005 5000
    

2. 确认构建和启动的顺序没搞错

有时候你先构建了镜像,之后才改了挂载配置,这时候旧容器还在,挂载自然不生效。记得这么操作:

  • 先停掉并删掉现有容器:
    docker-compose down
    
  • 重新构建镜像并启动容器:
    docker-compose up --build
    

3. 本地路径别搞错了

你的挂载配置是.:/usr/src/app,这里的.指的是你执行docker-compose命令时所在的目录。如果你在子目录里跑命令,那挂载的就不是你的项目根目录了。

  • 先确认当前目录是不是项目根目录:
    pwd
    
  • 嫌相对路径麻烦的话,直接用绝对路径更稳妥,比如:
    volumes:
      - /Users/yourname/projects/myapp:/usr/src/app
    

4. 验证挂载到底生效没

容器启动后,直接进容器看看挂载目录里的内容:

docker exec -it myapp ls /usr/src/app

要是能看到你本地项目的文件,那就说明挂载成了;要是看不到,再回头检查前面的步骤。

额外提醒:别让镜像里的内容干扰挂载

如果你的development.dockerfile里有COPY . $CONTAINER_PATH这种命令,把本地文件复制到镜像里了,那挂载的时候虽然会覆盖镜像内容,但如果挂载没生效,镜像里的旧内容就会保留。开发环境下其实可以注释掉这行,毕竟挂载已经会同步本地文件到容器里了。


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

火山引擎 最新活动