我正在尝试调用我的Docker容器中的一个函数runaudit
。
将包含runaudit
函数的shell脚本复制到映像内部,并将BASH_ENV
环境变量设置为指向/etc/audittools/audit.sh
我的问题是,如何在我的容器中运行这个runaudit
函数?
我尝试在容器内运行它,但得到以下消息。
/ # runaudit
/bin/sh: runaudit: not found
ENV
输出显示环境变量已经设置。
这里有Dockerfile和小shell函数.
- 注意:**真正的函数要大得多,我需要在它自己的文件中维护它。
我很感激任何建议或帮助。
- 停靠文件**
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 脚本-www.example.comaudit.sh
#!/usr/bin/env sh
function runaudit() {
echo "Hello World"
}
- 运行函数**
docker run -it test /bin/sh runaudit
3条答案
按热度按时间s71maibg1#
将其更改为普通的shell脚本;在通用编程术语中,使它成为一个“程序”而不是一个“函数”。
记住
docker run
在一个干净的环境中启动一个新的容器,运行它的主程序,然后退出。还记住shell脚本和shell函数之间的区别在于函数运行在它调用的shell的上下文中,并且可以改变环境变量和其他设置,而shell脚本运行在一个新的shell环境中;但由于在docker run
上下文中父shell环境即将被拆除,因此这并不重要。所以我将shell脚本更改为
然后更改停靠文件以在启动时运行它
m4pnthwp2#
你可以这样运行它:
vc9ivgsu3#
我尝试使用CMD命令,它在Dockerfile内部对我来说工作得很好。
您可以在audit.sh的chmod后添加这一行。您的最终dockerfile将类似于: