![](/img/trans.png)
[英]Not able exit from docker container with bash script containing exit command
[英]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"]
我期待从这个
执行一个简单的 bash 脚本,该脚本将在运行 docker 容器后从用户键盘输入和 output 获取此值的环境变量。 它是正确的。
(我遇到问题的部分)在每次运行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.