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

Docker运行ActiveMQ镜像报错:exec ./bin/activemq: no such file or directory

问题分析与解决方案

你遇到的问题是:基于提供的Dockerfile构建的镜像,在某台服务器可正常运行,但在Windows的Docker Desktop中执行docker run -it 123:11时,报错exec ./bin/activemq: no such file or directory,且已确认容器内该文件存在。以下是可能的差异原因及解决思路:

1. 脚本换行符不兼容(最常见原因)

Windows系统默认使用CRLF(回车+换行)作为文本换行符,而Linux容器内的Shell脚本要求使用LF(仅换行)。如果构建镜像时,apache-activemq-5.17.1/bin/activemq脚本文件带有Windows格式的换行符,会导致脚本开头的Shebang(#!/bin/sh)被解析为#!/bin/sh^M,系统无法识别这个解释器,从而抛出"文件不存在"的错误(实际是解释器找不到,而非脚本文件本身)。

验证方法

进入容器后执行:

cat -A ./bin/activemq | head -1

如果输出显示#!/bin/sh^M$,说明存在CRLF换行符问题。

解决方法

  • 构建镜像前,在Windows上使用工具(如Notepad++、VS Code)将activemq脚本的换行符改为LF格式;
  • 或者在Dockerfile中添加修复命令,在COPY后执行:
    RUN sed -i 's/\r$//' ./bin/activemq
    

2. CPU架构不兼容

能正常运行的服务器可能是x86_64架构,而你的Windows Docker Desktop可能使用了基于ARM架构的WSL2(比如搭载M系列芯片的Mac通过Parallels运行Windows,或Windows本身安装了ARM版WSL)。ActiveMQ的bin/目录下包含架构相关的二进制依赖(如activemq-admin等辅助工具),当容器运行在非x86_64架构时,这些二进制文件无法被正确执行,会触发"文件不存在"的错误。

验证方法

进入容器后执行:

uname -m

查看容器的CPU架构,对比正常运行服务器的架构是否一致。

解决方法

  • 在Windows Docker Desktop中切换到x86_64架构的WSL发行版(如Ubuntu x86_64);
  • 构建镜像时指定平台,执行:
    docker build --platform linux/amd64 -t 123:11 .
    

3. 脚本可执行权限缺失(可能性较低)

虽然Dockerfile中对/opt/activemq设置了755权限,但如果activemq脚本本身没有可执行权限(即未设置+x),也会导致执行失败。不过由于镜像在另一台服务器能正常运行,这个原因的概率较低,但可做验证。

验证方法

进入容器后执行:

ls -l ./bin/activemq

查看权限列是否包含x(如-rwxr-xr-x)。

解决方法

在Dockerfile中添加权限设置命令:

RUN chmod +x ./bin/activemq

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:10:33