docker-compose 与远程主机不使用 ssh

Posted

技术标签:

【中文标题】docker-compose 与远程主机不使用 ssh【英文标题】:docker-compose with remote host not working with ssh 【发布时间】:2021-08-28 20:09:48 【问题描述】:

我正在使用 DigitalOcean,特别是一键式 Docker 小滴。

Docker 正在 droplet 上运行,socket 文件位于 droplet 上的 /var/run/docker.sock。

我的机器上也安装了 docker 和 docker-compose。

我有一个 docker-compose.yml 可以在我的机器上本地运行。

我在 droplet 上有公钥,并将私钥添加到本地计算机上的 ssh-add 中。我的 ssh-key 有一个密码。

我可以从本地机器 ssh 进入我的 DigitalOcean droplet,没有任何问题或密码提示。

Droplet 上的 22 端口已打开。

编辑:两台机器上的 docker-compose > 1.28

鉴于这些事实,根据我阅读的所有教程和文档,这应该可行:

docker-compose -H "ssh://root@<my-digital-ocean-droplet-ip-here>" up -d

但它不起作用。我明白了:

ssh: connect to host <my-digital-ocean-droplet-ip-here> port 22: Connection timed out
ERROR: Couldn't connect to Docker daemon at http+docker://ssh - is it running?

我想不通。我尝试使用 docker 上下文、主机环境变量,但没有任何效果。我有什么遗漏吗?

编辑 - 更多细节。我还没有看到任何表明这很重要的东西,但是我的公钥末尾写着“azuread/”。同样,这不会干扰正常的 ssh。

编辑 - 这是 docker-compose.yml:

version: '3.9'
 
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: myhardrootpassword
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress_admin_guy
      MYSQL_PASSWORD: myhardpassword
    volumes:
      - db_data:/var/lib/mysql
      
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: pma
    environment:
      PMA_HOST: db
      PMA_PORT: 3306
    restart: always
    ports:
      - 8080:80

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - 8000:80
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress_admin_guy
      WORDPRESS_DB_PASSWORD: myhardpassword
      WORDPRESS_DB_NAME: wordpress
    working_dir: /var/www/html
    volumes:
      - ./wp-content:/var/www/html/wp-content
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini

volumes:
  db_data: 

编辑:这是版本号:

本地:docker --version Docker version 20.10.6, build 370c289

本地:docker-compose --version docker-compose version 1.29.1, build c34c88b2

服务器:docker-compose --version docker-compose version 1.27.4, build 40524192

服务器:docker --version Docker version 19.03.13, build 4484c46d9d

服务器:ssh -V OpenSSH_8.2p1 Ubuntu-4ubuntu0.2, OpenSSL 1.1.1f 31 Mar 2020

https://docs.docker.com/engine/reference/commandline/dockerd/ https://www.docker.com/blog/how-to-deploy-on-remote-docker-hosts-with-docker-compose/ https://github.com/docker/compose/issues/4181 https://blog.mikesir87.io/2019/08/using-ssh-connections-in-docker- How to run docker-compose on remote host?

【问题讨论】:

docker 本身是否有效(例如docker -H ssh://... ps)?如果这不起作用,您能否在问题中包含运行ssh root@&lt;your-digital-ocean-droplet-ip-here&gt; docker ps 的输出? 谢谢,@larsks:这很好用:ssh root@&lt;my-digital-ocean-droplet-ip-here&gt; docker ps 这也很好用:docker -H "ssh://root@&lt;my-digital-ocean-droplet-ip-here&gt;" ps 他们都给了我服务器上的容器列表 您能否也提供您的docker-compose.yml 文件?有些问题可能与此有关,但 Docker Compose 可能会给出不相关的错误 尝试重现 - 您的机器上的 Compose (docker-compose --version) 和主机上的 Docker (docker --version) 以及两者上的 SSH (ssh -V) 的确切版本是什么?跨度> @PierreB。我在上面添加了这些数字。无论结果如何,感谢您为此付出代价。 【参考方案1】:

错误:无法通过 http+docker://ssh 连接到 Docker 守护程序 - 它正在运行吗?

我不久前遇到过这个问题,它与身份验证有关。我的远程用户不是 root 并且无权访问 docker 组/守护进程,但我看到您在这里使用的是 root,但它可能值得一试。

This is where I found my solution

请注意,无法通过此语法传递 sudo,因此您需要确保您在命令行中指定的用户能够在不提升权限的情况下运行 docker 命令。 (例如,您可以将它们添加到远程系统上的“docker”组。)

我知道您正在使用带有密码的基于密钥的身份验证,而不是基于密码的身份验证,但是...已经承认基于密码的身份验证不起作用,并且存在一些相关的持续问题,例如 this one 用户也提到了一个类似的场景,尽管docker-compose 给他们带来了问题,docker -H ssh://user@docker.host ps 实际上对他们有用。

【讨论】:

以上是关于docker-compose 与远程主机不使用 ssh的主要内容,如果未能解决你的问题,请参考以下文章

使用 ssh 从 Gitlab CI 在远程主机上运行 docker-compose

docker-compose 安装问题:error: command 'i686-linux-gnu-gcc' failed with exit status 1

使用secureCRT远程Linux,出现远程主机拒绝连接。

Zabbix搭建与主机监控(docker-compose方式安装)

试图找到docker-compose远程API

将 ACCCEPTINVCHARS 与远程主机一起使用