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

如何通过SSH在远程Docker Context中用docker-compose挂载卷?

问题分析与解决方案

当然可以通过docker-compose挂载远程主机的资源,你遇到的问题核心是环境变量的解析时机:

当你在docker-compose.yml里写${HOME}时,这个变量是被本地shell提前解析的,而不是交给远程Docker daemon去处理。所以你的本地${HOME}(比如/home/local-user)被替换后,远程Docker daemon会尝试在自己的主机上找这个不存在的路径,自然就触发了挂载错误。

而你用docker run时直接写了绝对路径/home/user/run,这个路径会直接传给远程daemon,所以能正常识别并挂载远程文件。


解决方法

方法1:直接使用远程主机的绝对路径

最直接的方式是把docker-compose.yml里的挂载路径改成远程主机上的实际绝对路径,比如:

version: "3.3"
services:
  nginx:
    image: nginx:1.17.10-alpine
    container_name: nginx
    restart: unless-stopped
    volumes:
      - /home/user/run/nginx.conf:/etc/nginx/nginx.conf  # 这里写远程主机的真实绝对路径
    ports:
      - "80:80"
      - "443:443"

这样docker-compose会直接把这个路径传给远程Docker daemon,让它挂载远程主机上的目标文件。

方法2:动态获取远程主机的环境变量

如果你不想硬编码路径,可以先通过SSH获取远程主机的HOME,再传递给docker-compose使用:

  1. 先执行命令获取远程主机的HOME路径:
    REMOTE_HOME=$(ssh user@my.remote.host 'echo $HOME')
    
  2. 将这个变量传入docker-compose启动命令:
    REMOTE_HOME=$REMOTE_HOME docker-compose up -d
    
  3. 同时修改docker-compose.yml里的挂载配置:
    volumes:
      - ${REMOTE_HOME}/run/nginx.conf:/etc/nginx/nginx.conf
    

验证配置正确性

执行docker-compose config命令可以查看解析后的最终配置,确认挂载路径是远程主机的路径而非本地路径:

docker-compose config

如果输出里的路径显示为远程主机的真实路径(比如/home/user/run/nginx.conf),就说明配置没问题了。


额外注意事项

  • 确保远程主机上的/home/user/run/nginx.conf确实存在,并且是文件而非目录,避免触发报错里提到的“挂载目录到文件”类错误。
  • 确认远程Docker daemon有权限访问该路径(比如检查文件权限、SELinux限制等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:47:31