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

如何在docker-compose的build指令中使用自定义卷?

如何在docker-compose的build指令中使用自定义卷?

嘿,我明白你的问题了——你想把自定义卷作为构建镜像的上下文,但这里有个关键误区:Docker的build阶段是在主机上执行的,它没法直接访问Docker卷里的内容,build.context参数要求的是主机本地的文件系统路径,而不是卷的名称。

先看你的配置,其实你的root_volume是个绑定挂载(bind mount),它直接指向了主机上的/home/user/test目录。那最简单的解决办法就是直接把build的context设为这个主机路径,不用绕卷:

修改后的docker-compose.yml应该是这样:

volumes:
  root_volume:
    driver: local
    driver_opts:
      device: "/home/user/test"
      type: none

nginx:
  build:
    context: /home/user/test  # 直接用主机上的实际目录路径
    dockerfile: nginx.Dockerfile
  container_name: test_nginx
  restart: unless-stopped
  tty: true
  ports:
    - "8015:80"
  networks:
    - test_network
  # 如果容器运行时需要挂载这个卷,再加下面这行
  # volumes:
  #   - root_volume:/path/inside/container

要是你的卷不是绑定挂载,而是普通的named volume(比如不是指向主机目录的),那你得先把卷里的内容同步到主机的某个临时目录,再用这个目录作为build context。比如可以用临时容器来复制内容:

# 启动临时容器挂载目标卷,把内容复制到主机的临时构建目录
docker run --rm -v root_volume:/volume alpine cp -r /volume/. /tmp/nginx-build-context

然后在docker-compose里把context: /tmp/nginx-build-context就行,不过这种方法需要手动执行同步步骤,自动化程度低,一般只在特殊场景用。

总的来说,build阶段只能用主机本地路径,绑定挂载的卷直接用对应的主机目录是最顺畅的方案~

备注:内容来源于stack exchange,提问作者M a m a D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 13:28:00