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

MacOS M1机器上Podman容器退出码139问题求助

问题:MacOS M1 上 Podman 容器以状态码139退出(已添加--platform linux/amd64)

在MacOS M1机器上运行Podman容器时,容器启动后立即以状态码139退出。已尝试添加--platform linux/amd64参数,但问题仍未解决。以下是相关信息:

执行命令及调试日志

podman --log-level=debug run -i -t --platform linux/amd64 --name=friends-app -p 8080:80 -e MYSQL_USER=user1 -e MYSQL_PASSWORD=pass1234 -e MYSQL_DATABASE=friends -e DBHOST=mysql --add-host=mysql:10.88.0.6 -d docker.io/swapnillinux/apache-php
INFO[0000] podman filtering at log level debug          
DEBU[0000] Called run.PersistentPreRunE(podman --log-level=debug run -i -t --platform linux/amd64 --name=friends-app -p 8080:80 -e MYSQL_USER=user1 -e MYSQL_PASSWORD=pass1234 -e MYSQL_DATABASE=friends -e DBHOST=mysql --add-host=mysql:10.88.0.6 -d docker.io/swapnillinux/apache-php) 
DEBU[0000] SSH Ident Key "/Users/bisma/.ssh/podman-machine-default" SHA256:IJ+8ffIXeHpO+qFIW0tsXtRTLInIsxBleS0peSw6gvc ssh-ed25519 
DEBU[0000] DoRequest Method: GET URI: http://d/v4.7.2/libpod/_ping 
DEBU[0000] DoRequest Method: GET URI: http://d/v4.7.2/libpod/networks/pasta/exists 
DEBU[0000] Adding port mapping from 8080 to 80 length 1 protocol "" 
DEBU[0000] Loading registries configuration "/etc/containers/registries.conf" 
DEBU[0000] DoRequest Method: POST URI: http://d/v4.7.2/libpod/images/pull 
DEBU[0010] User or group ID mappings not available: open /proc/self/uid_map: no such file or directory 
DEBU[0010] User or group ID mappings not available: open /proc/self/uid_map: no such file or directory 
DEBU[0010] DoRequest Method: GET URI: http://d/v4.7.2/libpod/images/docker.io%2Fswapnillinux%2Fapache-php/json 
DEBU[0010] DoRequest Method: POST URI: http://d/v4.7.2/libpod/containers/create 
DEBU[0010] DoRequest Method: POST URI: http://d/v4.7.2/libpod/containers/6b379db0288ea4696cb2fe6b60dd48b155d2300f78851f88be1989abd04b8517/start 
6b379db0288ea4696cb2fe6b60dd48b155d2300f78851f88be1989abd04b8517
DEBU[0010] Called run.PersistentPostRunE(podman --log-level=debug run -i -t --platform linux/amd64 --name=friends-app -p 8080:80 -e MYSQL_USER=user1 -e MYSQL_PASSWORD=pass1234 -e MYSQL_DATABASE=friends -e DBHOST=mysql --add-host=mysql:10.88.0.6 -d docker.io/swapnillinux/apache-php) 
DEBU[0010] Shutting down engines

当前运行容器列表

CONTAINER ID  IMAGE                                                   COMMAND     CREATED      STATUS      PORTS                   NAMES
5b34d10080cf  registry.access.redhat.com/rhscl/mysql-57-rhel7:latest  run-mysqld  3 hours ago  Up 3 hours  0.0.0.0:3306->3306/tcp  friends-db

容器报错日志

bisma@Bismas-MacBook-Pro ~ % podman logs friends-app 
/usr/sbin/apachectl: line 110:    11 Segmentation fault      (core dumped) /usr/sbin/httpd $OPTIONS "$@"

排查与解决建议

状态码139对应段错误(Segmentation Fault),结合M1架构特性,从以下方向排查:

  • QEMU模拟兼容性问题
    M1运行amd64容器依赖QEMU模拟,老旧或未适配的镜像易触发错误:

    • 更新Podman Machine的QEMU版本:执行podman machine stop→podman machine upgrade→podman machine start,重启后重试容器启动。
    • 切换网络模式:启动命令添加--network bridge,替换默认的pasta网络,避免网络层模拟冲突。
  • 镜像适配问题
    当前使用的swapnillinux/apache-php可能未适配跨架构场景:

    • 替换为官方多架构镜像:改用php:apache(官方支持amd64/arm64),重新启动容器测试。
    • 本地重构镜像:基于官方apache-php基础镜像,重新构建包含应用的镜像,确保依赖适配amd64架构。
  • 权限映射问题
    日志中User or group ID mappings not available警告可能引发权限异常:

    • 启动容器时添加--userns=keep-id参数,保留宿主用户ID映射,避免容器内进程权限不足。
    • 检查容器内httpd进程的运行用户,确保其对网站目录、配置文件拥有读写权限。
  • 核心转储分析
    若以上方法无效,开启核心转储定位具体问题:

    • 启动容器时添加--privileged --security-opt seccomp=unconfined参数,允许生成核心转储文件。
    • 复制核心文件到宿主,使用gdb分析httpd进程的核心转储,定位触发段错误的代码位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:47:05