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

Docker环境下Jenkins容器SSH连接CentOS7容器失败求助

解决Jenkins容器SSH连接CentOS7远程容器的问题

问题梳理

你在Docker练习中遇到两个核心连接问题:

  1. 使用服务名/容器名连接时,提示ssh: Could not resolve hostname remote_host: Name or service not known
  2. 使用IP连接时,提示ssh: connect to host 172.17.0.2 port 22: Connection refused
  3. 发现Dockerfile中指定的/usr/sbin/sshd路径可能不存在

分步解决方案

1. 修复容器DNS解析问题

Docker Compose自定义网络中,容器默认通过服务名实现DNS解析,而非容器名。你的docker-compose.yml里CentOS7容器的服务名是remote_host,因此在Jenkins容器内必须使用:

ssh remote_user@remote_host

不要用容器名remote-host,自定义网络不会为容器名生成DNS记录。

2. 修复sshd启动问题(核心)

你发现的/usr/sbin/sshd不存在是关键故障点,大概率是openssh-server安装不完整导致,以下是修正后的Dockerfile:

FROM centos:7

# 清理缓存+更新源,确保依赖安装完整
RUN yum clean all && yum -y update && \
    yum -y install openssh-server passwd initscripts mysql && \
    yum clean all

RUN useradd remote_user && \
    echo "1234" | passwd remote_user --stdin && \
    mkdir /home/remote_user/.ssh && \
    chmod 700 /home/remote_user/.ssh

COPY remote-key.pub /home/remote_user/.ssh/authorized_keys

RUN chown remote_user:remote_user -R /home/remote_user && \
    chmod 400 /home/remote_user/.ssh/authorized_keys

# 生成SSH主机密钥,必须在openssh-server安装完成后执行
RUN ssh-keygen -A

# 使用exec形式CMD,确保sshd作为PID1运行,能正确接收停止信号
CMD ["/usr/sbin/sshd", "-D"]

修正说明:

  • 添加yum clean all && yum -y update避免源缓存导致的安装不完整问题
  • 合并yum命令减少镜像层数,同时清理缓存缩小镜像体积
  • 改用["/usr/sbin/sshd", "-D"]的exec格式CMD,替代原shell格式,保证容器信号传递正常
  • 若仍怀疑路径问题,可临时添加RUN which sshd查看sshd实际安装路径,调试完成后删除该命令

3. 重新构建并启动容器

修改Dockerfile后,执行以下命令更新容器:

docker-compose down
docker-compose build --no-cache
docker-compose up -d

--no-cache参数确保完全重新构建镜像,避免旧缓存干扰。

4. 验证连接步骤

  1. 进入Jenkins容器:
    docker exec -it romantic_dhawan bash
    
  2. 确保Jenkins容器内已安装SSH客户端(Jenkins镜像基于Debian/Ubuntu,执行以下命令安装):
    apt-get update && apt-get install -y openssh-client
    
  3. 使用服务名连接远程容器:
    ssh remote_user@remote_host
    
    首次连接会提示确认主机指纹,输入yes后即可登录(密码为你设置的1234,或通过密钥直接登录)

额外排查点

  • 若仍提示连接拒绝,进入CentOS7容器检查sshd运行状态:
    docker exec -it remote-host bash
    ps aux | grep sshd
    
    若未运行,启动调试模式查看错误日志:
    /usr/sbin/sshd -d
    
  • 检查CentOS7容器的22端口是否正常监听:
    docker exec -it remote-host netstat -tulpn | grep 22
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:01:17