将当前目录中的文件名列表作为单个字符串发送到Docker容器的STDIN

我有一个 Docker 容器,需要传递一个包含当前目录中文件名的字符串(字符串数组也可以,但据我所知这是不可能的)。

我获取容器内文件名的第一个策略是运行命令docker build -t doc-validate . && docker run doc-validate (printf "%s " $(ls -p | grep -v /)),将输出(printf "%s " $(ls -p | grep -v /))直接发送到容器的标准输入中,但是,我zsh: bad pattern: (printf %s Dockerfile作为错误返回;在我看来,容器或 shell 试图在某处执行“Dockerfile”,我不知道为什么会发生这种情况,因为printf直接在终端中运行相同的命令按预期工作(仅打印当前目录中的文件名) .

我的第二种方法是尝试将这些文件名作为环境变量发送到容器。运行PROJECT_FILES=(printf "%s " $(ls -p | grep -v /))在预期的终端工作,$PROJECT_FILES输出这些文件名。但是,如果我尝试像这样将其直接传递到容器中:docker build -t doc-validate . && docker run --env PROJECT_FILES=(printf "%s " $(ls -p | grep -v /)) doc-validate我得到的结果与zsh: bad pattern: PROJECT_FILES=(printf %s Dockerfile错误相同。

在我看来,由于 'zsh:' 在错误输出中,命令甚至在进入容器之前就失败了,但是,我不明白为什么在终端中独立运行它们是可行的,以及为什么将它们作为参数传递给容器真是头疼。

如何将(printf "%s " $(ls -p | grep -v /))在本地机器上运行的输出作为容器内可访问的值?

Dockerfile:

FROM node:16
WORKDIR /moduleRoot
COPY package.json /moduleRoot
RUN npm install
COPY . /moduleRoot/
# Authorize execution of entrypoint bash script
RUN chmod +x /moduleRoot/docker-container-entrypoint.sh
# these values below will be set later, just register them explicitly here
ENV PROJECT_FILES=""
CMD [ "/moduleRoot/docker-container-entrypoint.sh" ]

Bash 入口点(CMD 中的 docker-container-entrypoint.sh 文件):

#!/bin/bash
echo "Args are: $@"
echo "PROJECT_FILES=$PROJECT_FILES"

以上是将当前目录中的文件名列表作为单个字符串发送到Docker容器的STDIN的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>