当前位置: 首页 > news >正文

记Anolis OS 8中如何盘podman

客户最近要换Anolis 8,只能用podman,而且断网,于是一顿操作:

  1. 把docker镜像save出来;
  2. 拷贝tar到目标环境;
  3. 安装podman;
  4. 导入tar镜像,并设置新tag,不然都是;
  5. 启动镜像 podman run nginx;
  6. 开通防火墙端口;
  7. 检查启动日志都正常;
  8. 客户机无法访问应用,curl也不通;

例子: docker tag dd34e67e3371 nginx:latest

最终方案,适配rootless 模式:
在这里插入图片描述

结果在 Podman 容器中部署的 Web 应用无法从外部访问,通常与 容器网络配置、防火墙规则、端口映射应用程序监听配置 有关。

在这里插入图片描述

以下是逐步排查和解决方法:

以下是重新排版后的内容,特别优化了源码部分的格式,使其更清晰易读:


1. 检查容器端口映射是否正确

  • 关键点:确保容器启动时正确映射了端口(-p 主机端口:容器端口)。
  • 示例命令
    podman run -d -p 8080:80 --name myweb nginx
    
  • 常见问题
    • 如果使用 -p 127.0.0.1:8080:80,则容器端口仅绑定到本地回环地址(外部无法访问)。
      修复:删除 127.0.0.1,改为 -p 8080:80
    • 检查容器是否正在运行且端口映射已生效:
      podman ps
      podman port <容器名或ID>
      

2. 检查容器网络模式

  • 默认网络模式:Podman 默认使用 slirp4netns 网络(rootless 模式),可能限制外部访问。
  • 解决方案
    • 方法 1:使用 --network=host 共享主机网络(需谨慎):
      podman run -d --network=host --name myweb nginx
      
    • 方法 2:使用 bridge 网络并正确映射端口:
      podman network create mynet  
      podman run -d --network=mynet -p 8080:80 --name myweb nginx
      

3. 确认防火墙规则

  • 关键命令
    # 查看防火墙状态
    sudo systemctl status firewalld
    
    # 确认端口已开放(以 8080 为例)
    sudo firewall-cmd --list-ports
    sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
    sudo firewall-cmd --reload
    
  • 常见问题
    • 防火墙未启动或规则未生效。
    • 端口未添加到正确的区域(如 public)。

4. 检查 SELinux 限制

  • 现象:如果 SELinux 处于 Enforcing 模式,可能阻止容器绑定端口。
  • 解决方案
    • 临时禁用 SELinux(仅用于测试):
      sudo setenforce 0
      
    • 永久允许容器网络访问
      sudo setsebool -P container_manage_network on
      
    • 添加 SELinux 策略
      sudo ausearch -c 'container' --raw | audit2allow -M my-container-policy  
      sudo semodule -i my-container-policy.pp
      

5. 验证容器内应用监听地址

  • 问题:容器内的应用可能仅监听 127.0.0.1(本地回环),而非 0.0.0.0(所有接口)。
  • 检查方法
    podman exec <容器名或ID> netstat -tuln
    
  • 修复:配置应用绑定到 0.0.0.0。例如,在 Nginx 中修改配置:
    server {
        listen 0.0.0.0:80;
        # ...
    }
    

6. 检查云主机安全组(阿里云等)

  • 关键点:云厂商的安全组规则可能拦截流量。
    • 登录阿里云控制台,进入实例安全组配置。
    • 确保入方向规则允许目标端口(如 8080/TCP)。

7. 验证主机路由和 IP 地址

  • 检查主机 IP
    ip addr show
    
  • 测试本地访问
    curl http://localhost:8080          # 从主机内部访问  
    curl http://<主机公网IP>:8080       # 从外部访问
    

8. Rootless 容器的端口限制

  • 问题:Rootless 容器默认无法绑定 1024 以下的端口。
  • 解决方案
    • 使用非特权端口(如 8080 代替 80)。
    • 允许非特权用户绑定低端口:
      sudo sysctl net.ipv4.ip_unprivileged_port_start=80
      

总结步骤

  1. 确认容器端口映射正确(-p 主机端口:容器端口)。
  2. 检查防火墙和云安全组规则。
  3. 关闭 SELinux 或调整策略(仅用于测试)。
  4. 确保容器内应用监听 0.0.0.0
  5. 验证网络模式和主机路由。

如果仍无法解决,请提供以下信息:

podman ps -a  
podman inspect <容器ID> | grep -i "port\|ip"  
sudo firewall-cmd --list-all  
sudo ss -tuln | grep 8080

持续更新中…

相关文章:

  • Photoshop EXIF 脚本
  • Android 自定义进度条:实现渐变色和圆角效果
  • 基于大语言模型的推荐系统(2)
  • Pytest自定义测试用例执行顺序
  • docker本地镜像源搭建
  • 基于定制开发开源AI大模型S2B2C商城小程序的商品选品策略研究
  • Spring Boot集成Jetty、Tomcat或Undertow及支持HTTP/2协议
  • 基于PyTorch实现的自适应注意力卷积网络(AACN)详解
  • 【C++】C/C++中的类型转换
  • SpringBoot 使用 spring.profiles.active 来区分不同环境配置
  • 【AIGC系列】3:Stable Diffusion模型原理介绍
  • WiseFlow本地搭建实录---保姆教程
  • AWS跨账号服务全解析:安全共享资源的最佳实践
  • 3.【基于深度学习YOLOV11的车辆类型检测系统】
  • Go在1.22版本修复for循环陷阱
  • Kylin麒麟操作系统 | 系统监控
  • Element-Plus,使用 El-form中 的 scroll-to-error 没有效果问题记录
  • openlayers结合turf geojson面获取面积和中心点
  • redis存取list集合
  • 腿足机器人之十三-强化学习PPO算法
  • 在线式客户服务平台/网站优化排名推荐
  • 政府网站建设规范/微信管理系统软件
  • 哈尔滨最好的网站建设公司/广州百度网站排名优化
  • wordpress商城+微信/seo搜索引擎实训心得体会
  • .net 手机网站开发/腾讯域名
  • 简单网站建设培训中心/搭建网站基本步骤