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

无法在远程主机运行Docker容器:Docker Compose SSH连接报错

问题描述

我尝试通过SSH连接,用Docker Compose在远程服务器上以Docker容器形式部署PHP网站和Nginx服务器。执行命令:

docker-compose -H ssh://<username>@<**.***.**.***> up -d

出现如下错误:

[+] Building 0.0s (0/0)
[+] Building 0.0s (0/0)
[+] Building 8.0s (2/2) FINISHED
 => ERROR [internal] load build definition from Dockerfile                                                                                                                                                                         5.0s 
 => CANCELED [internal] load .dockerignore                                                                                                                                                                                         5.0s 
------
 > [internal] load build definition from Dockerfile:
------
failed to dial gRPC: command [ssh -l username-- **.***.**.*** docker system dial-stdio] has exited with exit status 1, please make sure the URL is valid, and Docker 18.09 or later is installed on the remote host: stderr=

我的Dockerfile内容:

FROM php:8.0.2-fpm

RUN apt-get update && apt-get install -y \
    git \
    curl \
    zip \
    vim \
    unzip

WORKDIR /var/www

docker-compose.yml内容:

version: '3.8'

services:
  app:
    build:
      context: ./
      dockerfile: Dockerfile
    container_name: programwithgio-app
    restart: always
    working_dir: /var/www/
    volumes:
      - ../src:/var/www
  nginx:
    image: nginx:1.19-alpine
    container_name: programwithgio-nginx
    restart: always
    ports:
      - 8000:80
    volumes:
      - ../src:/var/www
      - ./nginx:/etc/nginx/conf.d
解决方案

从错误信息看,核心问题是SSH连接远程Docker daemon时出现故障,以下是排查和修复步骤:

1. 修正SSH连接URL格式

错误日志里的命令显示username--多了一个短横线,说明你的-H参数格式有误。正确的远程Docker连接URL应该是:

docker-compose -H ssh://<username>@<服务器IP> up -d

确保用户名和IP之间只有一个@符号,无多余字符。

2. 配置SSH免密登录

Docker Compose通过SSH连接远程daemon时,需要无密码登录权限:

  • 先手动测试SSH连接:ssh <username>@<服务器IP>,如果需要输入密码,执行以下步骤配置免密:
    ssh-keygen -t ed25519  # 一路回车生成密钥对
    ssh-copy-id <username>@<服务器IP>  # 将公钥上传到远程服务器
    
    再次测试SSH连接,确认无需输入密码即可登录。

3. 检查远程服务器Docker版本

错误提示要求远程主机安装Docker 18.09或更高版本,登录远程服务器执行:

docker --version

如果版本过低,升级到最新稳定版。

4. 确认本地文件路径与权限

你的docker-compose.yml中,app服务使用../src作为卷挂载目录:

  • 确保本地的../src目录存在,且当前用户有读取权限。
  • Docker Compose会把本地构建上下文(当前目录)通过SSH传到远程,所以要确保Dockerfile、docker-compose.yml等文件无权限问题。

5. 改用Docker上下文(推荐)

为避免每次输入-H参数,可配置Docker上下文:

docker context create remote-server --docker "host=ssh://<username>@<服务器IP>"
docker context use remote-server

之后直接执行docker-compose up -d即可,无需再指定远程主机。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:02:09