gpt4 book ai didi

docker - 如何从Docker中的Shell脚本调用函数?

转载 作者:行者123 更新时间:2023-12-02 18:10:32 24 4
gpt4 key购买 nike

我正在尝试在Docker容器内部调用函数runaudit

包含runaudit函数的shell脚本被复制到图像内部,并且BASH_ENV环境变量设置为指向/etc/audittools/audit.sh
我的问题是,如何在容器内运行此runaudit函数?

我试图在容器中运行它,但收到以下消息。

/ # runaudit
/bin/sh: runaudit: not found
ENV输出显示出已设置环境变量。

有了Dockerfile和小型Shell函数。

注意:实际函数要大得多,我需要将其保留在其自己的文件中。

我对此表示感谢或帮助。

Dockerfile
FROM alpine:3.10

MAINTAINER acme

ARG VERSION=0.3.0

RUN apk add --no-cache curl tar gettext libintl

RUN envsubst --version

RUN mkdir -p /etc/audittools

COPY audit.sh /etc/audittools

RUN chmod a+x /etc/audittools/audit.sh

ENV BASH_ENV "/etc/audittools/audit.sh"

Shell脚本-audit.sh
#!/usr/bin/env sh
function runaudit() {
echo "Hello World"
}

运行函数
docker run -it test /bin/sh runaudit

最佳答案

将其更改为普通的shell脚本;用通用编程术语来说,请使其成为“程序”而不是“功能”。

请记住,docker run在一个干净的环境下启动一个新容器,运行其主程序,然后退出。还请记住,shell脚本和shell函数之间的区别在于,函数在其调用shell的上下文中运行,并且可以更改环境变量和其他设置,而shell脚本在新的shell环境中运行;但是由于在docker run上下文中父 shell 环境将被拆除,所以这无关紧要。

所以我将shell脚本更改为

#!/bin/bash
# ^^^ use the standard shell location
# vvv remove the function wrapper
echo "Hello World"

然后更改Dockerfile以在启动时运行它

...
COPY audit.sh /etc/audittools
RUN chmod a+x /etc/audittools/audit.sh
CMD ["/etc/audittools/audit.sh"]

关于docker - 如何从Docker中的Shell脚本调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57553264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com