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

Docker部署的Ansible容器无法通过playbook ping模块连接其他Docker容器

核心差异说明

你在Ansible容器内执行的ping是系统ICMP网络检测命令,仅验证两台容器网络层可达;而Ansible内置的ping模块是应用层连通性检测,需要先通过SSH登录到目标主机、执行对应Python代码才能返回结果,二者逻辑完全不同,这是问题的核心原因。

常见故障原因及修复方案

1. Postgres容器未开启SSH服务

官方Postgres镜像默认没有预装、启动openssh-server服务,Ansible没有SSH通道可以登录目标容器,直接导致ping模块执行失败。
修复方式:如果确实需要用Ansible管理postgres容器,需基于官方镜像构建自定义镜像,安装openssh-server,配置好Ansible可用的登录账号、密码/公钥,启动容器时同时运行postgres和sshd进程即可。

2. Inventory配置缺少SSH连接参数

你的hosts文件仅配置了目标主机名,没有指定SSH连接所需的用户名、认证方式、端口等参数,Ansible会使用默认值尝试连接,无法匹配postgres容器的配置。
修改后的inventory参考配置:

[database]
postgres_container ansible_user=指定ssh登录用户名 ansible_password=对应登录密码 ansible_port=ssh服务端口

如果使用密钥认证,将密码参数替换为ansible_ssh_private_key_file=/path/to/私钥文件即可。

3. Playbook存在语法错误

你提供的playbook有缩进错误,ping模块未缩进至所属task的层级,会直接导致语法解析失败。
修正后的playbook配置:

---
- hosts: database
  tasks:
    - name: test connection
      ping:

临时网络连通性验证方案

如果你仅需要验证网络连通性,不需要通过Ansible管理postgres容器,可以直接调用系统ping命令,不需要使用Ansible的ping模块:

---
- hosts: localhost
  tasks:
    - name: check postgres container network connectivity
      shell: ping -c 3 postgres_container
      register: ping_res
    - debug:
        var: ping_res.stdout_lines

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:39:05