繁体   English   中英

保存 output 的 bash 命令从 Dockerfile 后 ZC5FD214CDD0D2B3B4272E73BFZ 容器启动

[英]Save output of bash command from Dockerfile after Docker container was launched

我有一个以 ubuntu 图像为基础的 Dockerfile。

FROM ubuntu
ARG var_name
ENV env_var_name=$var_name
ENTRYPOINT ["/bin/bash", "-c", "echo $env_var_name"]

我期待从这个

  1. 执行一个简单的 bash 脚本,该脚本将在运行 docker 容器后从用户键盘输入和 output 获取此值的环境变量。 它是正确的。

  2. (我遇到问题的部分)在每次运行docker run --rm -e env_var_name=%valueOfVar% IMAGE-NAME环境变量的值保存到文件 + 中,我可以看到从键盘值输入的列表。

我对第 2 部分的想法就像docker run --rm -e env_var_name=%valueOfVar% IMAGE-NAME > /directory/tosave/values.txt 这有效,但只保存最后一个值,而不是值列表。

如何更改 Dockerfile 以将值保存到文件中,Docker 将看到哪个 Docker 在运行后将读取和输出值? 可能我不应该使用 ENTRYPOINT 吗?

感谢任何可能的帮助。 我卡住了。

强调 output 和预期的环境变量保存。

就像@lojza 暗示的那样, >覆盖文件,而>>附加到它们,这就是为什么您的命令正在破坏文件而不是添加文件的原因。 所以你可以用这个来修复它:

docker run --rm -e env_var_name=%valueOfVar% IMAGE-NAME >> /directory/tosave/values.txt

或使用tee(1)

docker run --rm -e env_var_name=%valueOfVar% IMAGE-NAME | tee -a /directory/tosave/values.txt

To clarify though, the docker container is not writing to values.txt , your shell is what is redirecting the output of the docker run command to the file. 如果您希望文件由 docker写入,您应该使用-v将文件或目录安装到容器中,并在那里重定向回声的 output。 这是一个例子:

FROM ubuntu
ARG var_name
ENV env_var_name=$var_name
ENTRYPOINT ["/bin/bash", "-c", "echo $env_var_name | tee -a /data/values.txt"]

然后像这样运行它:

$ docker run --rm -e env_var_name=test1 -v "$(pwd):/data:rw" IMAGE-NAME
test1
$ docker run --rm -e env_var_name=test2 -v "$(pwd):/data:rw" IMAGE-NAME
test2
$ ls -l values.txt 
-rw-r--r-- 1 root root 12 May  3 15:11 values.txt
$ cat values.txt
test1
test2

还有一件事值得一提。 echo $env_var_name正在打印名称为env_var_name的环境变量的值。 例如,如果您使用-e env_var_name=PATH运行容器,它将打印文字字符串PATH而不是$PATH环境变量的值。 这似乎是理想的结果,但我认为值得明确说明这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM