当前位置: 首页 > 知识库问答 >
问题:

在gitlab ci中使用ssh将docker编写到远程主机失败

云韬
2023-03-14

我无法从gitlab CI/CD管道运行程序使用SSH在远程主机上成功docker compose。

docker compose失败,出现以下错误:

http.client.RemoteDisconnected: Remote end closed connection without response
urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

我不能在Gitlab之外重现这个问题。意思是,我尝试在我的本地机器上运行相同的docker映像我的gitlab部署步骤使用,在我的脚本中手动执行完全相同的命令,它像一个魅力...

我甚至通过连接到主机并打印docker version来尝试脚本中的ssh配置,并且成功。

#!/bin/bash

apk update
apk add openssh-client
apk add --update bash

eval $(ssh-agent -s)
mkdir -p ~/.ssh
chmod 600 ~/.ssh
# copy the server private key
echo "$SSH_PRIVATE_KEY"
echo "$SSH_PRIVATE_KEY" | ssh-add -
# copy server host key .pub file from /etc/ssh/ and paste it into this variable
echo "$SSH_SERVER_HOSTKEYS"
ssh-keyscan -p 12345 11.222.3.444
ssh-keyscan -p 12345 11.222.3.444 >> ~/.ssh/known_hosts

ssh root@11.222.3.444 -p 12345 "docker version; exit"

# Docker-compose app and db
docker-compose --verbose -H "ssh://root@11.222.3.444:12345" -f docker-compose.staging.yml up -d --build

exit
image: alpine:latest

services:
  - docker:dind

stages:
  - build
  - package
  - deploy

[...]

deploy:
  image: docker/compose:alpine-1.28.2
  stage: deploy
  environment:
    name: staging
  only:
    - master
  script:
    - sh deploy_to_staging.sh

多谢你的帮忙

共有1个答案

柴默
2023-03-14

我遇到了这个确切的问题,这取决于您的配置,它可能工作或不工作。基本上,我在我的服务器上创建了一个用户deployer,我正试图通过ssh连接到该服务器。

因为我忘了将这个新用户(deployer)添加到docker用户组,所以他没有docker权限。所以基本上我所做的就是

[root@myserver ~]# groupadd docker
groupadd: group 'docker' already exists
[root@myserver ~]# usermod -aG docker deployer
 类似资料:
  • 使用远程开发扩展包,VisualStudioCode可以打开当前系统上运行的Docker容器,并打开使用SSH连接的远程主机上的文件夹。 如果远程SSH主机上运行Docker容器,VSCode如何打开该容器中的文件/文件夹?

  • 机器A和B之间的通信工作良好。我可以运行像或这样的命令,它会给出预期的结果: 我听说过,但还没有尝试过,但据我所知,这并不能解决我的问题。 有什么方法可以直接使用来实现这一点。解决办法可能是使用连接到远程主机,并直接从远程主机使用客户机,但我希望尽可能避免这种解决方案。 在上运行,而不是在本地计算机上运行。

  • 问题内容: 我在Mac OS X和Docker Machine(默认的boot2docker计算机)上使用Docker,并使用docker-compose设置开发环境。 假设其中一个容器称为“ ”。现在我想做的就是打电话: 我的公用密钥(已添加到该公用密钥并将用于对我进行身份验证)位于主机上。我希望该密钥可用于Docker Machine容器,这样我就能够通过容器内部使用该密钥进行身份验证。最好不

  • 我正在尝试使用JProfiler分析远程主机/服务器上的Web应用程序,但该过程似乎比我想象的要复杂。 我已经设法在我的开发工作副本上本地评测了,但结果在那里没有用处。 有没有一种方法可以将JProfiler连接到该服务器,而无需将其安装在远程机器/服务器上,因为这不是我拥有的选项。类似于远程调试,我在其中配置主机和端口并连接。 提前感谢!

  • 我在Mac OS X上使用Docker机器(使用默认的boot2docker机器),并且我使用docker-compose来设置我的开发环境。

  • 章节简述:  本章讲解了如何使用nmtui命令配置网卡参数,以及通过nmcli命令查看网络信息并管理网络会话服务,从而让读者能够在不同工作场景中快速地切换网络运行参数;还讲解了如何手工绑定round-robin轮询模式双网卡,实现网络的负载均衡。 本章深入介绍了SSH协议与sshd服务程序的理论知识、Linux系统的远程管理方法以及在系统中配置服务程序的方法,并采用实验的形式演示了使用基于密码与密