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网络,避免网络层模拟冲突。
- 更新Podman Machine的QEMU版本:执行
镜像适配问题
当前使用的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
相关产品推荐
相关产品推荐

