仅作为背景,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
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
。感谢您的帮助。
exec format error
通常试图表达的内容无关。如果您是从 Google 来到这里,首先请确保您实际上并没有尝试在一个平台上构建并在另一个平台上运行。就我而言,正如 @larsks 指出的,我的 ENTRYPOINT 脚本有一个拼写错误。
您的startupSplunk.sh 文件应以我发布这个答案是因为当我在 Google 上搜索
#!/bin/bash
开头,而不是#/bin/bash
Docker exec format error 时,所有内容都指向明显的平台问题,没有任何迹象表明这种类型的错误配置可能是罪魁祸首。