从 Dockerfile 调用脚本时 Docker 失败并出现 exec 错误,直接调用时有效

问题描述 投票:0回答:1
我正在尝试在 Docker 容器中构建 Splunk 转发器。

仅作为背景,Splunk 转发器容器将与 Snort 3 Docker 容器一起运行,并在 /var/log/snort 上共享 Docker 卷以获取 Snort 日志。然后转发器的输出将被发送到另一个容器中的 Splunk 接收器,目前我对此知之甚少,还没有到达那里。首先,这一切都在 Ubuntu 24.04 VM 中运行。这是一个网络安全类项目,而不是生产设置!

我有这个

Dockerfile,它有一个调用startupSplunk.sh

脚本的入口点
我已添加到容器中。

当我构建并运行容器时,我使用以下命令:


docker build -t firewallsplunk .



docker run -it --mount 'type=volume,source=snortlogs,dst=/var/log/snort' firewallsplunk

我收到此错误:


exec /tmp/startupSplunk.sh: exec format error


因此,假设我的 shell 脚本没有抛出 exec 格式错误,我查看我的

script 的作用,它调用 /opt/splunkforwarder/bin/splunk 可执行文件。那么,一定是我下载了错误的包还是什么?请记住,我使用 dpkg -i

 安装了 splunk,所以我认为这会捕获错误的平台错误。

但是当我在 Dockerfile 中使用

CMD ["bash"]

 启动容器并四处查看时,我可以直接运行 /opt/splunkforwarder/bin/splunk 可执行文件,而不会出现任何 exec 格式错误。

root@CS6035-24:/home/machine/firewallProject/firewallSplunk# ./run.sh splunkfwd@2c6d93f04e2e:/$ /opt/splunkforwarder/bin/splunk -help Warning: Attempting to revert the SPLUNK_HOME ownership Warning: Executing "chown -R splunkfwd:splunkfwd /opt/splunkforwarder" SPLUNK GENERAL TERMS Last Updated: August 12, 2021 ...
重申一下这个问题,当我尝试通过 Dockerfile 中的 ENTRYPOINT 运行脚本时,为什么会出现 

exec format error

,但是当我直接在 bash 的容器中运行相同的命令时,它工作正常?我想了一下,也许这是 bash 与 sh 的问题,但我使用 sh 而不是 bash 启动容器,并且仍然可以运行命令,而不会出现烦人的 
exec format error

感谢您的帮助。

docker dockerfile splunk docker-volume
1个回答
0
投票
底线,这与

exec format error

 通常试图表达的内容无关。如果您是从 Google 来到这里,首先请确保您实际上并没有尝试在一个平台上构建并在另一个平台上运行。

就我而言,正如 @larsks 指出的,我的 ENTRYPOINT 脚本有一个拼写错误。

您的startupSplunk.sh 文件应以

#!/bin/bash

 开头,而不是
#/bin/bash

我发布这个答案是因为当我在 Google 上搜索

Docker exec format error 时,所有内容都指向明显的平台问题,没有任何迹象表明这种类型的错误配置可能是罪魁祸首。

© www.soinside.com 2019 - 2024. All rights reserved.